gpt4 book ai didi

c# - InsertOnSubmit 没有附加?

转载 作者:行者123 更新时间:2023-11-30 16:34:41 25 4
gpt4 key购买 nike

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

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

下面的代码成功地将我的新对象插入到数据库中,但没有为子 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 之前调用 Attach 导致后者抛出“无法添加已存在的实体”异常。

那么,这是 LINQ-to-SQL 中的一个错误,其中插入的对象没有正确附加到数据上下文吗?

我该如何解决这个问题?

最佳答案

我会设置 Bar 属性而不是 Foo 类的 BarId 属性。在我看来,Linq-to-sql 在这里做错的是首先拥有 BarId 属性。它不会增加任何值(value),并且违背了 OOP 的核心原则。因此,我会将您的代码更改为如下内容:

var foo = new Foo();
foo.Bar = //get bar with id: 123;
context.GetTable<Foo> ().InsertOnSubmit(foo);
foo.Bar.Something();

关于c# - InsertOnSubmit 没有附加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2371900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com