我在 VS 中有一个解决方案“MySolution”。在一个项目“域”中,我定义了以下类:
public class CarBase
{
public virtual void Foo();
}
public class Car : CarBase
{
[BelongsTo(..., Lazy=FetchWhen.OnInvoke)]
public virtual Person person { get; set; };
public override void Foo()
{
person.HasCar = true; // #1
person.Save();
}
}
在另一个名为“Bussines”的“MySolution”项目中,我有以下代码:
using(SessionScope session = new SessionScope(FlushAction.Never))
{
CarBase carBase = CarBase.GetItem(123);
carBase.Foo();
}
好的,那有什么问题?由于“无法访问惰性属性”,该代码在 #1 中失败。我不明白为什么该对象在GetItem的同一个SessionScope中。
另外,如果在同一代码中我将FlushAction.Never更改为FlushAction.Auto,错误就会消失。
我想知道为什么会这样?。为什么FlushAction属性应该改变延迟加载的处理方式?
我不知道被覆盖的方法,或者两个代码都在不同的解决方案中这一事实是否重要。我猜不是,但 ORM 非常令人惊讶。
提前致谢。
PD:如果在GetItem的下一行我做:
if(carBase is Car)
((Car)carBase).HasCar.ToString();
即使使用FlushAction.Never,它也可以解决问题。