在创建新对象(Foo)之后,我为EntityRef关联属性(Bar)设置了键(EntityRef)。然后,我希望将新对象插入到数据库中,然后能够访问延迟加载的子对象。
不幸的是,延迟加载属性在调用InsertOnSubmit()之后返回null。但是,如果我将对象附加到数据上下文中,则返回正确的对象。
下面的代码成功地将我的新对象插入到数据库中,但没有正确地设置子Bar属性的延迟加载:
var foo = new Foo();
foo.BarId = 123;
context.GetTable<Foo> ().InsertOnSubmit( foo );
foo.Bar.Something(); // throws NullReferenceException在这里,将正确加载Bar对象:
var foo = new Foo();
foo.BarId = 123;
context.GetTable<Foo> ().Attach( foo );
foo.Bar.Something(); // method is called on lazy-loaded Bar object在InsertOnSubmit之前调用附加会导致后者抛出“无法添加已经存在的实体”异常。
那么,在LINQ中,插入的对象没有正确地附加到数据上下文中,这是一个错误吗?
我该怎么解决这个问题?
发布于 2010-03-03 14:24:11
我将设置Bar属性而不是Foo类的BarId属性。在我看来,Linq在这里所做的错误是首先拥有BarId属性。它没有增加任何价值,而且违背了OOP的核心原则。所以,我会把你的代码修改成这样:
var foo = new Foo();
foo.Bar = //get bar with id: 123;
context.GetTable<Foo> ().InsertOnSubmit(foo);
foo.Bar.Something();https://stackoverflow.com/questions/2371900
复制相似问题