使用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
答案 0 :(得分:2)
认为这种关系有两面性。当您设置关系的一侧时,另一侧需要更新,因此在上述情况下以及设置ProductOptionCategory时,它实际上是将新对象添加到层压ProductOptionCategory端的ProductOptions关系。
解决方法正如您已经发现的那样,并且设置了基础外键,因此LINQ to SQL不会以通常的方式跟踪对象,并且需要隐式指示它应该持久保存对象。
当然,性能的最佳解决方案是从源数据中确定您不想添加哪些对象,并且从不首先创建实例。