• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: EOF inserts PK automatically
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: EOF inserts PK automatically


  • Subject: Re: EOF inserts PK automatically
  • From: Marek Wawrzyczny <email@hidden>
  • Date: Mon, 8 Nov 2004 11:59:54 +1100


On 06/11/2004, at 23:10, Sako! wrote:

before i call EC.SaveChanges(). another Application has already inserted a row in the Table with the same PK. after that WO tries to insert row with invalid PK.
this problem is also explaind in the WO documentation unfortunately without really good solution :(


I don't know where you got that, its wrong. The real PK is generated during save changes as part of a transaction. There is no danger of duplication. PK numbers can be skipped but never duplicated.

I think i miss something or something is here wrong.
When i don t set the PK as a ClassProperty, EOF creates its own table "EO_PK_TABLE" in the database, and saves the last PK in the column pk.
Another applications like ACCESS (what i really have as another application) for example do not use this technique.


let me give an example:
1. EOF adds a row with the PK "27", and CHANGES the pk column in the table EO_PK_TABLE to "27"
2. ACCESS adds a row with the PK "28".
3. EOF does not mention what happens to the table and pk. tries to write with a PK "28" <== which is already used.


Mr. Chuck, i know you are experienced developer here, but I am sure what I am telling you and its 100% correct.

I cant change ACCESS now. its expensive and complicated.
WO must be flexible with the database and ACCESS.
So I thought I use the database itself.
There is a feature in MS-SQL <IDENTITY>, what ALWAYS allows the database to create the PK automatically.
The problem is, this works only if all applications never try to write in the PK column.
Its possible and easy to make ACCESS stop write in the PK column. And now my question: "how can i make EOF stop inserting the PK?"


This PK conflict is even in the WO books a big problem, even Apple has no good suggestion for that.
If you have any suggestions for me please let me know.

Actually as far as I can tell, the EO_PK_TABLE is not the table that WebObjects uses to get the next PK. It's easy to test this. On a development (not your production) database, start up your application, create some records in a table of your choice (either through another application or through the database) and don't update the EO_PK_TABLE. EOF will still generate records with the correct PK. In fact you can drop the entire EO_PK_TABLE table altogether and WebObjects will still happily create it and keep on working.


I am not sure what EOF needs EO_PK_TABLE for, but it does not seem to need it for the generation of PKs. I remember reading on Omnigroup that EOF always gets the max() value on the PK column prior to generating the PK. You are always guaranteed to get a unique PK for your records.

I think what you're asking for is how to stop WebObjects from trying to generate the PK and make it use the SQL auto-increment feature... and the answer is, you cannot.


Marek Wawrzyczny

software engineer
-------------------------->
ish group pty ltd
http://www.ish.com.au
7 Darghan St Glebe 2037 Australia
phone +61 2 9660 1400   fax +61 2 9660 7400

_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


  • Follow-Ups:
    • Re: EOF inserts PK automatically
      • From: "Sako!" <email@hidden>
    • Re: EOF inserts PK automatically
      • From: Mark Morris <email@hidden>
References: 
 >Re: EOF inserts PK automatically (From: "Sako!" <email@hidden>)
 >Re: EOF inserts PK automatically (From: Chuck Hill <email@hidden>)
 >Re: EOF inserts PK automatically (From: "Sako!" <email@hidden>)

  • Prev by Date: Re: EOF problems
  • Next by Date: Re: overriding ALL exceptions
  • Previous by thread: Re: EOF inserts PK automatically
  • Next by thread: Re: EOF inserts PK automatically
  • Index(es):
    • Date
    • Thread