LINQ to SQL:使用DataContext“插入”部分方法设置PK

时间:2010-06-22 03:06:48

标签: linq-to-sql

我正在努力实现与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。

0 个答案:

没有答案