代码之家  ›  专栏  ›  技术社区  ›  ChadT

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

  •  0
  • ChadT  · 技术社区  · 16 年前

    我正在为一家租车公司建造一个预订引擎。

    我有一个booking L2S对象,它有一个car和location对象(以及随后的fk carid/locationid字段)。

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

    当用户继续执行该过程时,会设置carid和locationid属性,但是由于预订对象尚未持久化回数据库,因此我无法引用booking.car.carmodel。

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

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

    等。

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

    已尝试附加或 可能添加一个非新实体 从另一个加载 数据结构。不支持此操作。

    因此,它似乎认为预订实体不是新的。如果我尝试将已明确设置的值(booking.car=null)设为空,则会引发另一个错误:

    试图消除汽车和预订之间的关系。但是,关系的一个外键(booking.carid)不能设置为空。

    现在我被难住了…


    最终解决方案

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

    1 回复  |  直到 16 年前
        1
  •  0
  •   Daniel Brückner    16 年前

    我很确定您的数据上下文处理有问题。每个请求创建一个吗?如果答案是“是”,问题是对象与不同的上下文关联。您必须将它们与用于从数据库中提取它们的上下文分离,然后将它们重新与要用于存储它们的上下文匹配。