我们目前有几个底层数据库表,如Events
、Shop
Products
、内容页面等,每个表都有共享的属性,如名称、网站前端的详细信息页面、缩略图 URL、活动标志等。
我正在尝试找出创建共享属性类的最有效方法,这些属性可用于通常传递这些对象。 例如,搜索结果页。 可以针对最初实际上跨多个表的数据集合的名称进行搜索。
由于所有这些类都源自LINQ
类,我正在努力使用继承,并且我不想开始编辑数据上下文设计器以满足我的需求。
目前,我LINQ classes
上的每个分部类都包含一个 SharedObject 方法:
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";
}
....
这听起来像是一个合适的解决方案吗?
考虑使用接口。这要灵活得多。
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
{}
我认为传递共享对象的最有效方法是使用"责任链模式" 责任链
对于继承 LINQ,您会想到使用 IQueryable <T>。希望对您有所帮助