2016-09-27 13 views
2

DocumentのテーブルはDocumentID(PK)& DocumentNameのカラムを持っています。 Connector_DocumentConnectorID(PK)、DocumentID(FK)&他のテーブル。外部キーの関係を持つ複数のテーブルにリストを挿入するEntity Framework

私はList<Document> & ConnectorIdを入力しています。私は、Document表にList<Document>を保存してconnectorID &がDocumentIdをフェッチしてConnector_Documentテーブルにすべて保存これら&のDocumentIDを取得したいです。

ドキュメント表

DocumentID  DocumentName 
----------------------------- 
    10    test1 
    11    test2 

Connector_Documentテーブル:

ConnectorID DocumentID 
     5    10 
     5    11 

私はcを知って、次の入力

List<Document> documents = new List<Document>{new Document{ DocumentName ="test1"}, 
new Document{DocumentName ="test2"}}; 
int connectorId = 5 

私の出力があるべきで

リストをループし、ドキュメントテーブルに追加します.PK &を使用して同じものを使用して、Connector_Documentテーブルに挿入します。しかし、私はこれが効率的な方法だとは思わない&私はこのためにEFから何らかの方法を提供することを期待しています。誰かが私を助けます。私はあなたがここにトランザクションを必要としないEntity Frameworkの6

答えて

0

を使用しています

using (Entities context = new Entities()) 
{ 
    using (var dbContextTransaction = context.Database.BeginTransaction()) 
    { 
     context.Documents.Add(document); 
     context.SaveChanges(); 

     if (connectorDocument != null) 
     { 
      connectorDocument.DocumentID = document.DocumentID; 
      context.Connector_Document.Add(connectorDocument); 
      context.SaveChanges(); 
     } 

     dbContextTransaction.Commit(); 
    } 
} 

が、それはリストの代わりに単一のオブジェクトされていた、私はこれを行っている可能性があります。したがって、関係を正しく定義した上で、コードは問題なく動作するはずです。関連するオブジェクトに対して手動でデータ挿入を操作する必要はありません。これはEFによって行われます。

using (Entities context = new Entities()) 
     { 

      foreach (var d in documents) 
      { 
       context.Documents.Add(d); 
       context.SaveChanges(); 
      } 
     } 
1

AddRangeを使用すると、ドキュメントリストを任意の方法で保存できます。しかし、各Connector_Document行に対して別々のオブジェクトが必要なので、それらを作成する方法はまだ必要です。私はこのようなものを提案します:

using (Entities context = new Entities()) 
{ 
    using (var dbContextTransaction = context.Database.BeginTransaction()) 
    { 
     context.Documents.AddRange(documents); 
     context.SaveChanges(); 

     var connectorDocuments = from doc in documents 
           select new Connector_Document 
           { 
            ConnectorId = connectorId, 
            DocumentId = doc.DocumentId 
           }; 
     context.Connector_Document.AddRange(connectorDocuments); 
     context.SaveChanges(); 
     dbContextTransaction.Commit(); 
    } 
} 
関連する問題