我有Document
表DocumentID
(PK)& DocumentName
列。
另一个表Connector_Document
ConnectorID
(PK),DocumentID
(FK)&其他一些专栏。
我有List<Document>
&amp; ConnectorId
作为输入。我想在List<Document>
表格中保存Document
,获取所有这些内容DocumentID
&amp;使用提供的Connector_Document
&amp;表格保存在connectorID
表格中获取DocumentId
。
使用以下输入
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
表:
ConnectorID DocumentID
5 10
5 11
我知道我可以遍历列表,添加文档表获取它的PK&amp;使用相同的方法插入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();
}
}
我正在使用Entity Framework 6。
答案 0 :(得分: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();
}
}
答案 1 :(得分:0)
您不需要在此处进行交易。因此,您已正确定义了关系,下面的代码应该没有任何问题。您不需要手动操作相关对象的数据插入。这些都是由EF完成的。
using (Entities context = new Entities())
{
foreach (var d in documents)
{
context.Documents.Add(d);
context.SaveChanges();
}
}