2012-08-09 132 views
0

我們目前有幾個基礎數據庫表,如Events,ShopProductsProducts,內容頁面等,每個都有共享的屬性,例如在網站的前端有名稱,詳細信息頁面,縮略圖URL,一個活動的標誌等C#類型轉換/ Linq

我試圖找出最有效的方式來創建一類共享屬性,可用於傳遞這些對象一般。一個例子可能是搜索結果頁面。可以根據最初實際跨越多個表的數據集合的名稱進行搜索。

由於所有這些類都來自LINQ類,所以我正在努力使用繼承,我不想開始編輯datacontext設計器以適應我的需要。

目前我LINQ classes每個部分類包含一個共享對象方法:

public partial class Event 
    { 
     public SharedObject SharedObject 
     { 
      get 
      { 
      return new SharedObject(this); 
      } 
     } 
    ... 

這是重複事件,網絡購物產品等共享對象類包含以下內容:

public class SharedObject 
{ 
public string Reference { get; set; } 
public string Name { get; set; } 
public string ImageURL { get; set; } 
public bool IsVisible { get; set; } 
public bool IsAdminVisible { get; set; } 
public string FrontEndDetailsURL { get; set; } 
public string AdminDetailsURL { get; set; } 
public object OriginalObject { get; set; } 
public string ObjectDescription { get; set; } 

public SharedObject(object originalObject) 
{ 
    if (originalObject.GetType() == typeof(Event)) 
    { 
     Event eventx = (Event)originalObject; 

     Reference = eventx.Reference; 
     Name = eventx.Name; 
     ImageURL = eventx.ImageURL; 
     IsVisible = eventx.IsActive && !Event.IsArchived; 
     IsAdminVisible = !eventx.IsArchived; 
     FrontEndDetailsURL = eventx.DetailsURL; 
     AdminDetailsURL = eventx.AdminDetailsURL; 
     OriginalObject = originalObject; 
     ObjectDescription = "Event"; 
    } 
    .... 

這是否像一個合適的解決方案?

回答

0

考慮使用一個接口。這更加靈活。

public interface ISharedObject 
{ 
    string Reference { get; set; } 
    string Name { get; set; } 
    string ImageURL { get; set; } 
    bool IsVisible { get; set; } 
    bool IsAdminVisible { get; set; } 
    string FrontEndDetailsURL { get; set; } 
    string AdminDetailsURL { get; set; } 
    object OriginalObject { get; set; } 
    string ObjectDescription { get; set; } 
} 

public partial class Event : ISharedObject 
{} 
+0

謝謝Amiram我現在已經採取了這種方法,但刪除了所有設置聲明,因爲在這種情況下它們不是必需的。 – 2012-08-09 10:07:10

0

我想通過你周圍的共享對象的最有效方法是使用Chain of responsibility

「責任鏈模式」對於繼承LINQ你想使用的IQueryable < T>的。我希望它能幫到你