将数据插入多个 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 中设置它。 我不明白该怎么做。能否提供示例代码 好吧,为了做到这一点,我们需要查看您的示例实体模型的相关部分(MainTableSecondTable 类,流畅的配置等) 见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 表,其中主表具有自动编号的主要内容,如果未能解决你的问题,请参考以下文章

将数据添加到主表上的多个记录的链接表中

访问:将数据输入多个表格的单行表格

加入具有不同结构的多个表?

Mysql中具有相同列名的表之间的数据复制

MYSQL从另一个表更新数据,如果存在,否则插入[重复]

将 Excel 工作表中的数据插入到链接的访问表中