代码之家  ›  专栏  ›  技术社区  ›  Peter Mounce

如何使用Linq To SQL在我希望指定其标识的位置插入实体,例如,在创建数据库时预填充表?

  •  0
  • Peter Mounce  · 技术社区  · 17 年前

    我正在编写一个使用LinqToSql进行数据访问的产品。虽然我们发展迅速,但模式经常发生变化。这意味着我们在开发过程中会转储和重新加载数据库。因此,每次重新创建基线数据都会产生开销。

    恢复数据库备份的过程没有用,因为我们需要同样频繁地更新模型数据库;同样的开销(我想,无论如何)。

    所以,我想使用DataContext。CreateDatabase,然后从CSV文件中提取一些数据。好的。但我也想缝合这些关系,这意味着,理想情况下,提前知道主键是什么(否则,鉴于一些身份是GUID,很难缝合我需要的链接)。

    什么是等价物 SET IDENTITY_INSERT IdentityTable ON Linq To SQL中的(和OFF)?有吗?

    1 回复  |  直到 17 年前
        1
  •  2
  •   Amy B    17 年前

    你不需要提前知道主键,你只需要知道关系。

    假设您想加载客户和订单,其中一个客户有许多订单。

    首先将Customers从文件加载到内存中,使用文件中的伪主键值作为CustomerId(此值稍后将被数据库自动生成的值替换)。

    Dictionary<int, Customer> customers = LoadCustomersFromFile();
    

    其次,将订单从文件加载到内存中。为OrderId使用伪造的主键值。重新使用这些伪造的CustomerId来建立关系。将订单添加到他们的相关客户。

    Dictionary<int, Order> orders = LoadOrdersFromFile();
    foreach(Order o in orders.Values)
    {
      customers[o.CustomerId].Orders.Add(o);
    }
    

    构建对象图后,InsertOnSubmit所有对象。

    推荐文章