如何编写Linq to SQL自动生成的部分扩展?

时间:2020-03-06 14:47:02  来源:igfitidea点击:

我使用VS 2008 SP1 Framework 3.5 SP1创建了一个从Linq到SQL Clasees的类,在这种情况下,我扩展了部分内容

partial void UpdateMyTable(MyTable instance){
   // Business logic
   // Validation rules, etc.
}

我的问题是,当我执行db.SubmitChanges()时,它执行UpdateMyTable并进行验证,但它没有更新,我收到此错误:

[Exception: Deliver]
   System.Data.Linq.ChangeProcessor.SendOnValidate(MetaType type, TrackedObject item, ChangeAction changeAction) +197
   System.Data.Linq.ChangeProcessor.ValidateAll(IEnumerable`1 list) +255
   System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode) +76
   System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode) +331
   System.Data.Linq.DataContext.SubmitChanges() +19

解决方案

  • 如果提供此方法,则必须在该方法中执行更新。

http://msdn.microsoft.com/en-us/library/bb882671.aspx

  • 如果在子类中实现Insert,Update和Delete方法,则在调用SubmitChanges时,LINQ to SQL运行时将调用它们,而不是其自身的默认方法。

尝试MiTabla.OnValidate

如果要实现此方法而不自己执行更新,则使该方法调用ExecuteDynamicUpdate(item);。

同样,分别对DeleteMyTable和InsertMyTable执行ExecuteDynamicDelete和ExecuteDynamicInsert。