Re: EOF inserts PK automatically
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