2

私は2つのテーブルを持っています。ドキュメント テーブルとバージョン テーブル。バージョン テーブルに ID フィールドと documentID フィールドがあることを除いて、どちらも同一です。ドキュメント テーブルには documentId フィールドがあります。

ドキュメントを正しく見つけることができますが、パディングしている id が documentId フィールドではなく id フィールドでこれを見つけようとしているため、バージョン テーブル情報を見つけることができません。

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");
    }

11 で渡さipacs_documentれた ID が機能するため、 が正しく検出されます。ただし、代わりにipacs_version検索しようとしているため、何も見つかりません。id 11documentId 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

Whereさらに複雑なものについては、常にLinq クエリを使用できることに注意してください。

db.IPACS_Version.Where(x => x.Id == id && x.DocumentId == docid && x.Flag == true);  

注:(エンティティの作成方法に関係なく)を使用できますがquery、 (コメントに基づいて)適切に設定されていない場合は、そのようにすることをお勧めしません。迅速な修正の代わりに、テーブル、pk-s が必要に応じて設定されていることを確認してください。これは不可欠です。次に、どのクエリが最適かを確認できます (必要な場合は [検索] を使用します)。Where
keys

于 2013-04-11T17:53:36.243 に答える