1

我试图弄清楚如何使用 LINQ to Entities 将新记录添加到具有另一个表的外键的表中。我将尝试解释:

假设我有一个带有两个表的简单数据库。例如,让我们调用一个 LibraryItem 和另一个 LibraryItemStatus。LibaryItem 具有指向 LibraryItemStatus 表的外键,因此可以为项目分配状态。

我的问题是如何使用 LINQ To Entities 创建新的 LibraryItem 并将其与状态相关联?我下面的代码一定是错误的,但我找不到任何帮助的例子。

LibraryEntities entities = new LibraryEntities();

LibraryItem item = new LibraryItem();
item.Name = "some name";
item.SomeAttribute = "x";
// What do I do here?
// This seems wrong as I don't want a new status.
item.Status = new Status() { id = 1 };
// This seems wrong as I don't really want to have to query the repository
item.Status = entities.Status.First(s => s.StatusID == 1);
// 
entities.AddToItems(item);
entities.Savechanges();
4

3 回答 3

0

检查 item.StatusReference 属性。这允许在没有实际查询的情况下发现/设置关系上的元数据。

于 2009-03-04T20:36:34.430 回答
0

这是“正确”的方式:

item.Status = entities.Status.First(s => s.StatusID == 1);

或者:

item.Status = entities.GetObjectByKey(new EntityKey("MyContext.Status", "StatusID", 1));

...如果对象已经加载,它将从内存中加载(entities.Status.First 将始终查询数据库)。

这是“hacky但更快的方式”:

item.StatusReference.EntityKey = new EntityKey("MyContext.Status", "StatusID", 1);

好:从来没有任何查询。坏:你不能引用 item.Status; 它仍然是空的。

更新在 .NET 4.0 中会有更好的方法来做到这一点。

于 2009-03-04T20:50:26.003 回答
0

您还可以将相关表映射到实体模型中的 ItemEntity。

我已经为 ProductName 中的 Product-> ProductLanguage 在下面的 url 上发布的我的项目中完成了该操作。

openticket.codeplex.com

于 2009-03-17T09:27:14.630 回答