我有两张桌子。文档表和版本表。除了版本表具有ID字段和documentID字段之外,两者都是相同的。文档表有一个documentId字段。
我可以正确找到该文档,但我找不到版本表信息,因为我填充的id正在尝试在id字段而不是documentId字段中找到它。
public ActionResult ApproveDocument(int id = 0)
{
IPACS_Document ipacs_document = db.IPACS_Document.Find(id);
IPACS_Version ipacs_version = db.IPACS_Version.Find(id);
ipacs_version.dateApproved = System.DateTime.Now;
ipacs_version.approvedBy = User.Identity.Name.Split("\\".ToCharArray())[1];
ipacs_document.dateApproved = System.DateTime.Now;
ipacs_document.approvedBy = User.Identity.Name.Split("\\".ToCharArray())[1];
ipacs_document.revision = ipacs_version.revision;
db.SaveChanges();
return RedirectToAction("Approve");
}
所以ipacs_document
被正确找到,因为传入11的id有效。但ipacs_version
找不到任何内容,因为它试图找到id 11
而不是documentId 11
。
答案 0 :(得分:1)
如果您想知道如何使用Find
(DbSet<>)来吸引composite keys
...
Find方法将对象数组作为参数。工作时 使用复合主键,传递以逗号分隔的键值 并按照它们在模型中定义的顺序相同。
http://msdn.microsoft.com/en-us/library/gg696418(v=vs.103).aspx
db.IPACS_Version.Find(id, documentid); // mind the order
对于任何更复杂的内容,请记住,您始终可以使用Linq查询,Where
,例如
db.IPACS_Version.Where(x => x.Id == id && x.DocumentId == docid && x.Flag == true);
注意:您可以使用
query
,Where
(无论您的实体是如何制作的) -
但如果您的keys
设置不正确(根据评论) - 我不鼓励您这样做。代替 快速修复,确保您的表,pk-s设置为他们应该 - 因为那是必不可少的。然后你可以看到哪个查询最适合你(或者 只需使用查找,如果这就是你所需要的。)