实体框架一对多插入 - 外键违规

Can*_*tro 6 c# oracle entity-framework

我第一次使用Entity Framework,我正在尝试使用集合创建一个对象(我希望集合中的所有对象也可以在数据库中创建)但是我有一些外键违规.

我的样本表:

table APPOINTMENTS: ID, VAR1, DATE_APPOINTMENT
table GUESTS: ID, APPOINTMENT_ID, USER_ID, VAR2, VAR3
Run Code Online (Sandbox Code Playgroud)

我的测试代码:

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);
Run Code Online (Sandbox Code Playgroud)

在DomainService,我有:

public void InsertAppointment(APPOINTMENTS appointment)
{
    using (var context = this.ObjectContext)
    {
        context.AddToAPPOINTMENTS(appointment);
        context.SaveChanges();
    }
}
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:{"ORA-02291:违反完整性约束(FK_GUESTS_APPOINTMENTS) - 未找到父密钥"}

我究竟做错了什么?

更新: 要在数据库中创建ID,我在插入前使用每个表的序列和触发器来获取下一个值.当我创建单个对象时,例如没有来宾的约会,它会插入数据库并生成id.

Can*_*tro 4

这个问题的解决办法:

“从序列生成的 ID 字段将无法正确处理。保存实体后,ID 将返回为 0。我将通过手动破解 SSDL(在文本编辑器中打开 .edmx 文件)来修复此问题ID 字段上的 StoreGeneeratedPattern="Identity" 属性(第 6 行和第 16 行)。请注意,设计人员可能会在将来修改时删除该更改。

虽然我认为这不是绝对必要的,但修改某些类型元数据也可能是谨慎的做法,例如在适用的情况下将 SSDL 中的“number”更改为“int”,将 CSDL 中的“Decimal”更改为“Int32”。通常这些不会自动生成所需的值,尤其是使用 XE 时。”

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