假设我有一个名为用户的表格。使用LINQ desinger,我将得到以下内容:
到目前为止一切顺利。现在我想定义一个通用基类,它将Linq.Table属性转换为所有子类的JSON字符串。所以我会:
using Newtonsoft.Json;
class BasePlugin<T> where T : System.Data.Linq.DataContext, new()
{
protected T DataContext = new T();
protected string GetJSONData()
{
//*** DataContext if of type System.Data.Linq.DataContext, therefore it won't know the Linq Table property of its subclasses
return JsonConvert.SerializeObject(DataContext.Cannot_get_subclass_property_Linq_table);
}
}
要完成问题中的代码,这是一个子类的示例:
class UserPlugin : BasePlugin<UserDataContext>
{
//The protected member DataContext inherited from BasePlugin
//has a property called Users of type System.Data.Linq.Table<User>.
//The point to to avoid implementing GetJSONData() in all subclasses
}
总而言之,问题是如何避免在基类中实现GetJSONData()。
答案 0 :(得分:6)
目前尚不清楚您想要哪张桌子。单个数据上下文中可能存在多个表。在您的特定模型中可能没有,但在LINQ to SQL中肯定会有。
如果有用,您可以致电DataContext.GetTable(Type)
或DataContext.GetTable<T>
,并且可以按实体类型和上下文类型对您的类进行参数化:
class BasePlugin<TContext, TEntity> where TContext : DataContext, new()
where TEntity : class
{
protected TContext DataContext = new TContext();
protected string GetJSONData()
{
return JsonConvert.SerializeObject(DataContext.GetTable<TEntity>());
}
}
这就是你要追求的吗?