为什么在Dbml中生成的“表”类不包含有用的事件,如
OnBeforeInsert OnBeforeUpdate
OnAfterInsert 等
我错过了什么吗?
此问题与尝试设置时间戳列的挫败感有关。
更新
我创造了以下方法,这样做可以满足每个人的想法吗?
public class Model
{
internal virtual void OnBeforeInsert()
{
}
internal virtual void OnBeforeUpdate()
{
}
}
public partial class DbDataContext
{
public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode)
{
foreach (var insert in this.GetChangeSet().Inserts)
{
if (insert is Model)
{
((Model)insert).OnBeforeInsert();
}
}
foreach (var update in this.GetChangeSet().Updates)
{
if (update is Model)
{
((Model)update).OnBeforeUpdate();
}
}
base.SubmitChanges(failureMode);
}
}
public partial class Address : Model
{
internal override void OnBeforeInsert()
{
var created = DateTime.Now;
this._Modified = created;
this._Created = created;
}
}
答案 0 :(得分:3)
我最近遇到过类似的问题。
在“OnValidate”的生成类中有一个部分方法。简单地在partial中声明方法将强制它被调用(vb.net不支持像c#这样的部分方法)或者在c#中简单地声明一个部分方法。
该方法传递System.Data.Linq.ChangeAction枚举,该枚举是:删除,插入,更新或无。
以下是使用内置局部方法所做的示例。
public partial class Address
{
private partial void OnValidate(System.Data.Linq.ChangeAction action)
{
if (action == System.Data.Linq.ChangeAction.Insert)
{
var created = DateTime.Now;
this._Modified = created;
this._Created = created;
} else if (action == System.Data.Linq.ChangeAction.Update) {
this._Modified = DateTime.Now;
}
}
}