【发布时间】:2009-05-21 10:03:50
【问题描述】:
我正在为汽车租赁场所构建预订引擎。
我有一个 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();
等等
当需要保存预订时,它会抛出:
已尝试附加或 添加一个不是新的实体,也许 从另一个加载 数据上下文。这不受支持。
因此,它似乎认为 Booking 实体并不新。如果我尝试清除我明确设置的值(Booking.Car = null),它会引发另一个错误:
已尝试删除 Car 和 Booking 之间的关系。但是,关系的其中一个外键 (Booking.CarID) 不能设置为 null。
现在我被难住了......
最终解决方案
我最终做的(在尝试了一堆不同的事情之后)是在保存预订之前,我从当前上下文中重新加载 Car 和 Location 对象。效率不高,但嗯。
【问题讨论】:
-
附注 - 您可以将谓词从 Where() 移动到 Single() 产生 Booking.Car = DB.Car.Single(x => x.id == Booking.CarID);
标签: .net linq-to-sql