【问题标题】:How do you insert a complex object into the database?如何将复杂对象插入数据库?
【发布时间】:2014-04-29 21:08:49
【问题描述】:

假设我们有这三个表:

--Car--
ID
1
2

--Event-- 
ID   CarID   EventTypeID  DateTimeAdded
1    1       1            2014-04-28 12:00:00     

--EventType-- 
ID  Name
1   "Entry Created"
2   "Entry added to sales chart"
3   "Entry removed from sales chart"

使用实体框架(在我的例子中是 EF 5),如何将 Car 对象添加到数据库中?我已经尝试了许多不同的方法来实现这一点,包括下面的代码,但还没有任何效果。

Car newCar = new Car(){ }

Event newEvent = new Event(){
   CarID = newCar.ID,
   EventTypeID = 2,
   DateTimeAdded = Datetime.Now;
}

newCar.Event.Add(newEvent);

context.Car.Add(newCar);
context.SaveChanges();

任何帮助将不胜感激。


编辑:在 context.SaveChanges() 发生后,异常出现在 try catch 中。这是异常的内部异常:

INSERT 语句与 FOREIGN KEY 约束“FK_Event_EventType”冲突。冲突发生在数据库“CarSystem”、表“dbo.EventType”、列“ID”中

注意:这三个表之间存在关系,包括 Event 和 EventType。这会导致问题吗?如果是这样,我不知道如何解决它。

【问题讨论】:

  • 您的代码似乎没有错(除了一些语法错误)。您创建一辆新车,将其添加到 DbSet 并保存。标准的东西。您在寻找正确的数据库吗?
  • 是的,它正在查看正确的数据库。在 context.SaveChanges() 发生后的 try catch 中出现异常。这是异常的内部异常:INSERT 语句与 FOREIGN KEY 约束“FK_Event_EventType”冲突。冲突发生在数据库“CarSystem”、表“dbo.EventType”、列“ID”中。

标签: entity-framework entity-framework-5


【解决方案1】:

您可能希望按如下方式更改操作顺序:

context.Car.Add(newCar);
newCar.Event.Add(newEvent);

context.SaveChanges();

这样,Car 行(父)的 INSERT 调用将在 Event 行(子)的 INSERT 调用之前发出,避免外键错误。

【讨论】:

    【解决方案2】:

    我发现了问题:两个表的外键关系有问题。

    【讨论】:

    • 这不是一个可以启发未来访问者的答案。您应该详细说明或删除您的问题。
    猜你喜欢
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 2015-07-25
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多