【问题标题】:Navigation Property null With Entity Framework 4.3.1使用实体框架 4.3.1 的导航属性 null
【发布时间】:2012-05-03 08:51:02
【问题描述】:

我正在使用 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 实体时,我可以看到外键实际上填充了预期 Driver 的 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();

【问题讨论】:

  • 好的,我自己解决了,所以我将分享答案:我需要将驱动程序实体附加回上下文。 myContext.Driver.Attach(Driver)。然后我可以这样做:Ride.Driver = Driver 而不是 Ride.DriverID = Driver.DriverID
  • 请把这个写成答案并标记它,让大家看到它已经解决了,谢谢。
  • :-) 几乎就是我的意思。您看到问题下方的“答案栏”了吗?我想把你的解决方案放在那里,因为之后你可以点击“标记为答案”。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 2016-03-29
    • 2016-05-29
    • 1970-01-01
    相关资源
    最近更新 更多