[英]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.