我正在使用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();