首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InsertOnSubmit不附加?

InsertOnSubmit不附加?
EN

Stack Overflow用户
提问于 2010-03-03 14:09:54
回答 1查看 1.4K关注 0票数 3

在创建新对象(Foo)之后,我为EntityRef关联属性(Bar)设置了键(EntityRef)。然后,我希望将新对象插入到数据库中,然后能够访问延迟加载的子对象。

不幸的是,延迟加载属性在调用InsertOnSubmit()之后返回null。但是,如果我将对象附加到数据上下文中,则返回正确的对象。

下面的代码成功地将我的新对象插入到数据库中,但没有正确地设置子Bar属性的延迟加载:

代码语言:javascript
复制
var foo = new Foo();
foo.BarId = 123;
context.GetTable<Foo> ().InsertOnSubmit( foo );
foo.Bar.Something();    // throws NullReferenceException

在这里,将正确加载Bar对象:

代码语言:javascript
复制
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中,插入的对象没有正确地附加到数据上下文中,这是一个错误吗?

我该怎么解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-03 14:24:11

我将设置Bar属性而不是Foo类的BarId属性。在我看来,Linq在这里所做的错误是首先拥有BarId属性。它没有增加任何价值,而且违背了OOP的核心原则。所以,我会把你的代码修改成这样:

代码语言:javascript
复制
var foo = new Foo();
foo.Bar = //get bar with id: 123;
context.GetTable<Foo> ().InsertOnSubmit(foo);
foo.Bar.Something();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2371900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档