2

我有两张桌子。文档表和版本表。两者都是相同的,只是版本表有一个 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.

4

1 回答 1

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 已按应有的方式设置 - 因为这是必不可少的。然后你可以看到哪个查询最适合你(或者如果你只需要就使用 Find)。

于 2013-04-11T17:53:36.243 回答