entity framework一对多插入 – 外键违规

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

我的样本表:

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

我的测试代码:

 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); 

在DomainService我有:

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

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

我究竟做错了什么?

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

这个问题的解决方案:

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

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

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

至于我,只需打开图表.edmx并将每个表中每个主键的属性StoreGeneratedPattern从None更改为Identity即可解决问题。 保存后一切都很好。

我正在使用VS 2012,Entity Framework 5(尚不支持6),Oracle 11.2,最后一个ODP.NET 12,.Net 4.5

如果是EF代码第一种方法,如果出现此错误

(ORA-02291:违反了完整性约束(FK_GUESTS_APPOINTMENTS) – 未找到父密钥)

在我的例子中,有2个表具有标识列。 所以我刚才补充道

 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 

我的模型类的属性就在数据库中的标识列的列上方,它解决了我的问题:)

希望这有帮助:)

我无法确定您在哪里设置主键(约会类的ID属性)。 您是否在数据库端使用密钥生成器? 如果不是这应该是问题。

您正在插入一个记录,该记录具有在约束引用的父表中找不到的外键值。