我使用NerdDinner (MVC 2)作为我的项目的基础。虽然存储库接口设计工作得很好,但在我的实际应用程序中,有十几个模型类(而NerdDinner只有一个,即晚餐),这意味着我需要为每个类提供一个接口(及其实现)。此外,基本的接口方法(get、save、add、delete等)是相同的,这意味着我必须在每个实现类中复制和粘贴相同的代码。唯一需要更改的是类的类型,例如,客户的接口公开:
void Add(Customer customer)该命令的接口公开了:
void Add(Order order)这两种方法的实现基本上是相同的,但当然使用了适当的模型类型:
db.Customers.InsertOnSubmit(customer)和
db.Orders.InsertOnSubmit(order)分别使用。为了停止一遍又一遍地重复相同的代码(并尽量减少项目中的.cs文件数量),我想我可以定义一个通用的基本存储库接口,例如:
public interface IRepository<T>
{
void Add(T t)
void Delete(T t)
void Save(); // This one is truly the same in any case!
}但是,如何将泛型类型应用于实现代码呢?我需要这样的东西:
db.T.InsertOnSubmit(t)这能办到吗?
PS: db是datacontext对象(我正在使用linq到sql设计器)。
谢谢
发布于 2012-06-09 18:57:42
从你的问题
,但是如何将泛型类型应用于实现代码呢?我需要这样的东西:
db.T.InsertOnSubmit(t)
这能办到吗?
我想你需要这样的东西
db.GetTable<T>().InsertOnSubmit(entity);一个简单的存储库实现为您提供了一个想法:
public class Repository<T> : IRepository<T> where T : class
{
private NorthwindDataContext db = new NorthwindDataContext();
public Table<T> Data
{
get
{
return db.GetTable<T>();
}
}
public void Add(T entity)
{
db.GetTable<T>().InsertOnSubmit(entity);
}
public void Delete(T entity)
{
db.GetTable<T>().DeleteOnSubmit(entity);
}
public void Save()
{
db.SubmitChanges();
}
}https://stackoverflow.com/questions/10960377
复制相似问题