我正在努力实现与this old SO post中描述的类似的东西,它从来没有得到正确的答案。我正在尝试找到一种方法来委托在调用SubmitChanges()时将新插入对象的主键设置为DataContext InsertX()部分方法。从本质上讲,这会使主键生成 lazy ,并且更好地将其与业务逻辑分开。
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 Insert重载是我能看到的唯一方法。也许LINQ to SQL根本无法表达这种模式,因为它需要一个InsertingFoo / InsertedFoo区别来镜像PropertyChanging / PropertyChanged。