2012-08-09 88 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>的。我希望它能帮到你