2008-12-30 49 views
3

爲什麼在DBML生成的 「表」 類不包含像linq2sql缺少事件模型?

OnBeforeInsert OnBeforeUpdate

OnAfterInsert 等

我失去了一些有用的東西的事件?

這個問題與試圖設置時間戳列的沮喪有關。

UPDATE

我創造了這樣整齊什麼每個人都認爲以下方法是什麼?

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

我以前有過這個相同的問題,無法弄清楚,只是使用trigers – Shawn 2008-12-30 05:54:24

回答

3

我最近有類似的問題。

生成的類中存在「OnValidate」的部分方法。簡單地聲明部分方法會迫使它被調用(vb.net不支持像c#這樣的部分方法),或者在c#中簡單地聲明部分方法。

該方法傳遞System.Data.Linq.ChangeAction枚舉:Delete,Insert,Update或None。

下面是您使用內置部分方法所做的示例。

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; 
     } 
    } 

}