Entity Framework One-To-Many Insert - Foreign Key

2020-06-18 03:24发布

I'm using Entity Framework for the first time and I'm trying to create a object with a collection (and I want all the objects in the collection to be created in database as well) but I'm having some foreign keys violations.

My sample tables:

table APPOINTMENTS: ID, VAR1, DATE_APPOINTMENT
table GUESTS: ID, APPOINTMENT_ID, USER_ID, VAR2, VAR3

My test code:

DomainService aux = new DomainService();

APPOINTMENTS appointment = new APPOINTMENTS();
appointment.VAR1 = "BLA";
appointment.DATE_APPOINTMENT = new DateTime();

//The user with id = 1 is already created in the database
appointment.GUESTS.Add(new GUESTS { USER_ID = 1, VAR2 = 1, VAR3 = "F" });

aux.InsertAppointment(appointment);

At DomainService I have:

public void InsertAppointment(APPOINTMENTS appointment)
{
    using (var context = this.ObjectContext)
    {
        context.AddToAPPOINTMENTS(appointment);
        context.SaveChanges();
    }
}

But I'm getting this error: {"ORA-02291: integrity constraint (FK_GUESTS_APPOINTMENTS) violated - parent key not found"}

What am I doing wrong?

UPDATE: To create the ID's in the database, I am using a sequence for each table and a trigger before insert to get the next value. When I create a single object, e.g. a appointment without guests, it inserts in the database and it generates the id.

5条回答
▲ chillily
2楼-- · 2020-06-18 03:49

I cant see where you are setting your Primary Key (the ID property of the appointment class). Are you using a key generator on the database side? If not this should be the problem.

查看更多
不美不萌又怎样
3楼-- · 2020-06-18 04:00

In case of EF code first approach, if this error come

(ORA-02291: integrity constraint (FK_GUESTS_APPOINTMENTS) violated - parent key not found)

In my case there are 2 tables which have Identity columns. So I just added

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 

property to my model class just above the the column which is identity column in database and it solved my problem :)

Hope this help :)

查看更多
可以哭但决不认输i
4楼-- · 2020-06-18 04:08

As for me, the problem was solved simply by opening diagram .edmx and changing property StoreGeneratedPattern from None to Identity for each Primary Key in each table. After saving everything was fine.

I'm using VS 2012, Entity Framework 5 (6 is not supported yet), Oracle 11.2, last ODP.NET 12, .Net 4.5

查看更多
淡お忘
5楼-- · 2020-06-18 04:08

You're inserting a record with a foreign key value that is not found in the parent table that constraint refers back to.

查看更多
女痞
6楼-- · 2020-06-18 04:12

The solution to this problem:

"The ID fields that are generated from sequences won't be handled correctly. After saving the entities the ID's will be returned as 0. I'll fix this by manually hacking the SSDL (open your .edmx file in a text editor) with StoreGeneratedPattern="Identity" attributes on the ID fields (lines 6 and 16). Note that designer may rip that change out upon future modification.

While I suppose it's not absolutely necessary it might also be prudent to modify some type metadata such as changing "number"s to "int"s in your SSDL and "Decimal"s to "Int32"s in your CSDL where applicable. Frequently these don't auto-generate with the desired values especially with XE."

@http://www.chrisumbel.com/article/oracle_entity_framework_ef

查看更多
登录 后发表回答