簡體   English   中英

將列表插入具有外鍵關系實體框架的多個表中

[英]Insert list into multiple tables with foreign key relationship Entity Framework

我有Document與表格DocumentID (PK) DocumentName列。 另一個表Connector_Document帶有ConnectorID (PK)、 DocumentID (FK) 和其他一些列。

我有一個List<Document> & ConnectorId作為輸入。 我想將List<Document>保存在Document表中,獲取所有這些的DocumentID並使用提供的connectorID和獲取的DocumentId保存在Connector_Document表中。

使用以下輸入

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

我的輸出應該是:

文件表

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

Connector_Document _ Connector_Document表:

ConnectorID    DocumentID
      5             10
      5             11

我知道我可以遍歷列表,在文檔表中添加獲取它的 PK 並使用相同的內容插入 Connector_Document 表。 但是,我認為這不是有效的方式,我希望 EF 應該為此提供某種方式。 有人在這方面幫助我。

如果它是單個對象而不是列表,我可以這樣做:

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

我正在使用實體框架 6。

您可以使用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();
    }
}

您不需要在這里進行交易。 因此,您已經正確定義了關系,下面的代碼應該可以正常工作。您不需要手動操作相關對象的數據插入。這些都是由 EF 完成的。

using (Entities context = new Entities())
      {

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM