将数据插入多个 1:1 表,其中主表具有自动编号
Posted
技术标签:
【中文标题】将数据插入多个 1:1 表,其中主表具有自动编号【英文标题】:Inserting Data to Multiple 1:1 Table wherein Main Table has an autonumber 【发布时间】:2018-01-10 11:15:39 【问题描述】:我有多个具有 1:1 关系的表
我需要将字段分隔到另一个表中,因为其中一些很少使用。 “主”表的主键是自动编号(SQL Server 中的身份)
现在我需要使用实体框架从 XML 中插入多条记录
XDocument xDoc = XDocument.Load(Server.MapPath("~/xml/xmlFile.xml"));
List<MainTable> allListings = xDoc.Descendants("listing")
.Select(listing => new MainTable
listingCategory = listing.Element("listCategory").Value,
listingStatus = listing.Element("listStatus").Value
).ToList();
using (DemoEntities db = new DemoEntities())
foreach (var i in allListings)
db.Main.Add(i);
db.SaveChanges();
下面的代码是不可能的,因为我需要 SQL Server 自动分配给 [MainTable] 的 [id] 字段。
List<SecondTable> allListingsTableTwo = xDoc.Descendants("listing")
.Select(listing => new SecondTable
anotherField = listing.Element("fieldfromXML").Value
).ToList();
foreach (var i in allListingsTableTwo)
db.SecondTable.Add(i);
【问题讨论】:
你的MainTable
应该有SecondTable
的导航属性,你应该在原始Select
中设置它。
我不明白该怎么做。能否提供示例代码
好吧,为了做到这一点,我们需要查看您的示例实体模型的相关部分(MainTable
和 SecondTable
类,流畅的配置等)
见here。 ParentId 会按照 Ivan 的建议自动设置。
【参考方案1】:
您可以通过以下方式获取主键:
db.Main.Add(i);
context.SaveChanges();
int id = i.Id; // Yes it's here
【讨论】:
请记住,它不仅仅是一个 Id,因为它将整个 XML 数据存储到 MainTable。如果 XML 有 100 条记录,我需要获取 100 Id以上是关于将数据插入多个 1:1 表,其中主表具有自动编号的主要内容,如果未能解决你的问题,请参考以下文章