2008-10-21 64 views
0

是否可以使用構造函數方法擴展LINQ-to-SQL實體類,使該實體類繼承它的數據上下文類? - 實質上是將實體類轉換爲業務對象。用構造函數方法擴展一個LINQ實體類,並使該實體類繼承它的DataContext類

這是我目前使用的模式:

namespace Xxx 
{ 
    public class User : Xxx.DataContext 
    { 
     public enum SiteAccessRights 
     { 
      NotRegistered = 0, 
      Registered = 1, 
      Administrator = 3 
     } 

     private Xxx.Entities.User _user; 

     public Int32 ID 
     { 
      get 
      { 
       return this._user.UsersID; 
      } 
     } 

     public Xxx.User.SiteAccessRights AccessRights 
     { 
      get 
      { 
       return (Xxx.User.SiteAccessRights)this._user.UsersAccessRights; 
      } 

      set 
      { 
       this._user.UsersAccessRights = (Int32)value; 
      } 
     } 

     public String Alias 
     { 
      get 
      { 
       return this._user.UsersAlias; 
      } 

      set 
      { 
       this._user.UsersAlias = value; 
      } 
     } 


     public User(Int32 userID) 
     { 
      var user = (from u in base.Users 
         where u.UsersID == userID 
         select u).FirstOrDefault(); 

      if (user != null) 
      { 
       this._user = user; 
      } 
      else 
      { 
       this._user = new Xxx.Entities.User(); 

       base.Users.InsertOnSubmit(this._user); 
      } 
     } 


     public User(Xxx.User.SiteAccessRights accessRights, String alias) 
     { 
      var user = (from u in base.Users 
         where u.UsersAccessRights == (Int32)accessRights && u.UsersAlias == alias 
         select u).FirstOrDefault(); 

      if (user != null) 
      { 
       this._user = user; 
      } 
      else 
      { 
       this._user = new Xxx.Entities.User 
       { 
        UsersAccessRights = (Int32)accessRights, 
        UsersAlias = alias 
       }; 

       base.Users.InsertOnSubmit(this._user); 
      } 
     } 


     public void DeleteOnSubmit() 
     { 
      base.Users.DeleteOnSubmit(this._user); 
     } 
    } 
} 

更新:

注意,我在我的User類兩個構造的方法。我想將它們轉移到User實體類在其上的數據上下文類中擴展User實體類,以便數據上下文在「新建」上可用於實體類。

希望這是有道理的。

+0

我的標籤非常適合這個問題,奧梅爾。謝謝。 – roosteronacid 2008-10-21 18:27:47

回答

0

使實體成爲DataContext類型似乎沒有意義。它不需要是DataContext就可以被視爲業務對象,也不一定需要創建包含原始實體的類型。它可能會更好,只是延長了實體類,幷包含對一個DataContext使用組成一個參考:

namespace Xxx.Entities 
{ 
    public partial class User : IDisposable 
    { DataContext ctx; 

    public static GetUserByID(int userID) 
     { var ctx = new DataContext(); 
     var user = ctx.Users.FirstOrDefault(u=>u.UsersID == userID); 

     if (user == null) 
      { 
      user = new User(); 
      ctx.Users.InsertOnSubmit(user); 
      } 

     user.ctx = ctx; 
     return user;   
     }  

    public void Dispose() { if (ctx != null) ctx.Dispose(); } 
    } 
} 

如果你只是想屬性的名稱是比數據庫列名不同,做的映射文件。

1

裏克斯特拉爾有一些非常好的文章,解決我認爲你在找什麼。查看他的列表Linq Articles Here

1

從數據上下文繼承實體是一個壞主意。它們是兩個獨立的對象,並且被設計爲以這種方式操作。這樣做會導致各種各樣的問題,試圖在同一時間提交一系列相關的更改 - 通過多個數據上下文會導致此失敗,因爲每個嘗試獨立工作。