导航属性null使用实体框架4.3.1

时间:2012-05-03 08:51:02

标签: c# .net entity-framework navigation-properties

我正在使用 Entity Framework 4.3.1 ,但导航属性出现问题。

在我的上下文中,我启用了延迟加载:

public MyContainer()
        : base(ConnectionString, ContainerName)
{
    this.ContextOptions.LazyLoadingEnabled = true;
}

另外,我已将该属性设为虚拟(实际上是从我的模型生成的):

public virtual Driver Driver
{
    get { return _driver; }
    set
    {
        if (!ReferenceEquals(_driver, value))
        {
            var previousValue = _driver;
            _driver= value;
            FixupDriver(previousValue);
        }
    }
}
private Driver _driver;

这是一个名为Ride的实体。但是,当我访问myContext.Ride.Driver时,它为空。这很奇怪,因为当我在运行时检查Ride实体时,我可以看到外键实际上填充了预期驱动程序的ID。

我还需要做些什么吗?

当我生成新的Ride时,我设置 DriverID ,但随后我从中获取ID的驱动程序不会自动添加为导航属性。


好的,我自己就解决了,所以我会分享答案:我需要将Driver实体附加回上下文。 myContext.Driver.Attach(驱动程序)。然后我可以这样做:Ride.Driver = Driver而不是Ride.DriverID = Driver.DriverID。

在代码中我这样做:

db.Driver.Attach(Driver); // Driver is a public property in my class
myNewRide.Driver = Driver;
db.SaveChanges();

1 个答案:

答案 0 :(得分:0)

好的,我自己就解决了,所以我会分享答案:我需要将Driver实体附加回上下文。 myContext.Driver.Attach(驱动程序)。然后我可以这样做:Ride.Driver = Driver而不是Ride.DriverID = Driver.DriverID