linq to sql在内存中创建后插入实体

时间:2009-05-20 15:09:16

标签: .net linq-to-sql

我正在为汽车租赁场所建造一个预订引擎。

我有一个Booking l2s对象,它有一个Car和Location对象(以及后续的FK CarID / LocationID字段)。

在预订过程的第一步,我新建了一个Booking()课程。这会在会话中传递到后续页面。

当用户继续执行该过程时,会设置CarID和LocationID属性,但由于Booking对象尚未持久保存回数据库,因此我无法引用Booking.Car.CarModel。

所以我正在做的是明确地设置它:

Booking.Car = DB.Car.Where(x => x.id == Booking.CarID).Single();

当需要保存预订时,它会抛出:

  

已尝试附加或   或许,添加一个非新的实体   从另一个装载   DataContext的。这不受支持。

所以它似乎认为预订实体不是新的。如果我尝试将我明确设置的值(Booking.Car = null)置空,则会抛出另一个错误:

  

试图删除Car和Booking之间的关系。但是,其中一个关系的外键(Booking.CarID)不能设置为null。

现在我很难过......


最终解决方案

我最后做的事情(尝试了很多不同的事情之后)就在保存预订之前,我从当前的上下文重新加载了Car和Location对象。不完全有效,但是meh。

1 个答案:

答案 0 :(得分:0)

我很确定您的数据文本处理存在问题。你是否每个请求创建一个?如果答案是肯定的,那么问题是您的对象与不同的上下文相关联。您必须从用于从数据库中获取它们的上下文中分离它们,并将它们重新连接到您要用于存储它们的上下文。