0

私はEFを初めて使用し、参照テーブルからキーを作成または使用する必要があるシーンの1つにここで立ち往生しています。ユーザーは、参照テーブルに新しいレコードを作成するか、既存のレコードを使用できます。そのために、以下に示すようにエンティティ モデルを作成しました。

 Public class MaterialLineEntry()
 {
    EntryNumber = 0,
    OrganisationID=0,
    Organisation  Organisation 
  };

 Public class Organisation ()
  {
     ID = 0,                            
     Description = "Test",
     EntityChangeStatus ;
   };

これらの行エントリは、レポートと呼ばれる別のエンティティ内で定義されます

Public class Report()
{
         List<  MaterialLineEntry> materilaLineEntries;
 };

以下に示すように詳細を入力し、オブジェクト (レポート) を UnitOfWork に添付してコミットすると、すべて正常に動作します。エンティティ フレームワークは参照テーブルにレコードを作成し、新しく生成された外部キーを使用して行エントリ テーブルに入力します。

Report report =new Reort();
        report. materilaLineEntries.Add(new MaterialLineEntry()
            {
                EntryNumber=1,
                OrganisationID=0,
                Organisation=new Organisation()
                {
                    ID = 0,
                    Description = "Test",
                    EntityChangeStatus = EntityChangeStatus.Unchanged,
                }
            })

しかし、同じ組織の詳細を持つ行エントリに 2 つのオブジェクトを追加すると、次のようになります。

 report. materilaLineEntries.Add(new MaterialLineEntry()
            {
                EntryNumber=1,
                OrganisationID=0,
                Organisation=new Organisation()
                {
                    ID = 0,
                    Description = "Test",
                    EntityChangeStatus = EntityChangeStatus.Unchanged,
                }
            })

以前に作成した外部キ​​ーを使用する必要があります(一意の定数がある可能性があるため)。参照テーブルに重複レコードを挿入しようとしています。ここで必要なのは、エンティティ フレームの作業で最初の組織の詳細を追加し、同じレコード (この場合は [説明] 列) の後続の発生に対して同じ ID を使用する必要があることです。

これを解決するのを手伝ってください。前もって感謝します。(外部テーブルにデータを1つずつ追加して、さらに外部キーを使用することも考えましたが、それは悪い考えだと思います)。

4

1 に答える 1

0

MaterialLineEntry に外部キー "OrganizationId" があります。既存の組織を再利用するには、既存の ID を OrganizationId のみに割り当てる必要があります。例えば

report. materilaLineEntries.Add(new MaterialLineEntry()
            {
                EntryNumber=1,
                OrganisationID=0,//Id of a exsiting organization

            });

編集:完全なコード

Report report =new Reort();
var org=new Organisation()
                {
                    Description = "Test",
                    EntityChangeStatus = EntityChangeStatus.Unchanged,
                };
        report. materilaLineEntries.Add(new MaterialLineEntry()
            {
                EntryNumber=1,
                OrganisationID=0,
                Organisation=org
            });
        report.SaveChanges();
        report. materilaLineEntries.Add(new MaterialLineEntry()
                {
                    EntryNumber=1,
                    OrganisationID=org.Id,//Id of a exsiting organization

                });
       report.SaveChanges();
于 2013-07-08T19:37:57.883 に答える