我正在努力实现类似于
this old SO post
,但从未得到正确的答案。我试图找到一种方法,在调用SubmitChanges()时,将新插入对象的主键设置委托给DataContext InsertX()分部方法。本质上,这使得主键生成
懒惰的
,并更好地将其与业务逻辑分离。
public class Foo
{
public int Id
{
get ...
set ... // usual linq to sql bodies
}
}
...
// provide an implementation for the insert overload
public class DB : DataContext
{
partial void InsertFoo(Foo instance)
{
instance.Id = GetNextFooId();
ExecuteDynamicInsert(instance);
}
}
当插入多个具有DuplicateKeyException的对象时,此操作当前会失败,可能是因为LINQ to SQL尝试访问主键以区分实例?我尝试重写Equals和GetHashCode来解决这个问题,但没有成功。
异常没有提供导致问题的特定类的详细信息,也没有办法记录DataContext的内部操作,因此我非常感谢您的建议!
如果有某种类型的更新前事件在某个时候触发,我可以挂接它,但DataContext插入重载是我唯一能看到的方式。也许LINQ到SQL不能简单地表达这种模式,因为它需要InsertingFoo/InsertedFoo的区别来反映PropertyChanged/PropertyChanged。