我正试图了解如何使用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();
答案 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;它仍然是空的。
答案 2 :(得分:0)
您还可以将相关表格映射到entitymodel中的ItemEntity。
我已经为Product中的ProductName做了这个 - >我的项目中的ProductLanguage发布在下面的url上。