I am using Oracle with Entity Framework. The database ids are generated using triggers and sequences.
I want to set up Table-per-Type inheritance, as described here. I’ve set the “CourseId” to be StoreGeneratedPattern of “Identity”.
Everything seems to be fine, except when I insert a row. The table representing the base class (in the walkthrough linked above, the Course table) gets a generated ID as expected.
However the table representing the inherited class (in the walkthrough linked above, the OnlineCourse table) has a row inserted with the CourseId set to zero. This violates the foreign key constraint.
I assume it’s something to do with the sequence of inserts. I imagine it should work like:
- Insert the Course row
- Retrieve the newly created CourseId value
- Insert the OnlineCourse, using the new CourseId
However, this isn’t working because it’s just using the default value of the CourseId (zero) to insert into OnlineCourse.
Any ideas how to fix this?
Since @Campinho hasn’t written up his suggestion as an answer, I will do it.
This article has some background on a bug in StoreGeneratedPattern in VS2010.
If you have this problem install KB2561001.
I installed the hotfix and changed the StoreGeneratedPattern to "None" then back to "Identity" for the relevant Ids. I could clearly see the SSDL section had been updated to indicate the new setting.
Then everything just worked! I’m not sure what’s going to be in the patch from Oracle that they think will fix the problem.