代码之家  ›  专栏  ›  技术社区  ›  naasking

LINQ到SQL:使用DataContext“Insert”分部方法设置PK

  •  1
  • naasking  · 技术社区  · 16 年前

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

    0 回复  |  直到 9 年前