DLINQ-插入的实体没有.InsertOnSubmit(...)?

时间:2008-12-22 21:27:40

标签: linq-to-sql submitchanges insertonsubmit dynamic-linq

使用DLINQ时遇到了一个有趣的问题。当我实例化一个实体时,在DataContext上调用.SubmitChanges()会在数据库中插入一个新行 - 而不会调用.Insert [All] OnSubmit(...)。

//Code sample:
Data.NetServices _netServices = new Data.NetServices(_connString);

Data.ProductOption[] test = new Data.ProductOption[]
{
        new Data.ProductOption
        {
             Name="TEST1", 
             //Notice the assignment here
             ProductOptionCategory=_netServices.ProductOptionCategory.First(poc => poc.Name == "laminate")
        }
};

    _netServices.SubmitChanges();

运行上面的代码将在数据库中插入一个新行。在编写应用程序来解析XML文件并填充一些表时,我注意到了这种效果。我注意到当我只期待大约50左右时,有1000多个插入 - 然后我终于孤立了这种行为。

如何防止这些对象被隐式持久化?

谢谢, -Charles

1 个答案:

答案 0 :(得分:2)

认为这种关系有两面性。当您设置关系的一侧时,另一侧需要更新,因此在上述情况下以及设置ProductOptionCategory时,它实际上是将新对象添加到层压ProductOptionCategory端的ProductOptions关系。

解决方法正如您已经发现的那样,并且设置了基础外键,因此LINQ to SQL不会以通常的方式跟踪对象,并且需要隐式指示它应该持久保存对象。

当然,性能的最佳解决方案是从源数据中确定您不想添加哪些对象,并且从不首先创建实例。