使用关联创建新的LINQ to Entities对象

时间:2009-03-04 20:31:18

标签: linq-to-entities

我正试图了解如何使用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();

3 个答案:

答案 0 :(得分:0)

检查item.StatusReference属性。这允许在关系上发现/设置元数据而不实际查询它。

答案 1 :(得分: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;它仍然是空的。

更新There will be a better way to do this in .NET 4.0.

答案 2 :(得分:0)

您还可以将相关表格映射到entitymodel中的ItemEntity。

我已经为Product中的ProductName做了这个 - >我的项目中的ProductLanguage发布在下面的url上。

openticket.codeplex.com