我正在使用ASP.NET MVC和SQL Server 2012制作一个内部网站。我正在使用Onion Architecture创建存储库和架构。我的问题是,我所在的公司已经有几个服务器数据库,其中表之间没有关系,而是有一些用于映射这些关系的表。例如,一个用户表和一个文档表有一个名为User_joint_Document的表来建立关系,包含两个ID(IDDocument和IDUser)。现在当我写我的通用存储库时:
class Repository<T> : IRepository<T> where T : class
问题在于通用类型T没有意义,我无法使用EF查询影响模型中的值,这是正常的。如果有一个父类BaseEntity来为每个表定义ID,那就太好了,然后我可以这样写:
class Repository<T> : IRepository<T> where T : BaseEntity
我所有的表模型都将继承自BaseEntity。但这也意味着需要以关系方式重写整个数据库,并手动映射每个DB POCO(请纠正我如果我错了),而我没有这样做的技能(不同服务器DB中有超过300个表,我缺乏正确的知识和经验来进行此类操作)。
有没有办法保持原始的数据库结构,并编写一个通用存储库?如何去实现?
编辑为澄清我的问题,因为@saeb部分回答了我的问题。我是否可以拥有一个通用存储库,而不必为我的DB POCOs设置父类?还是我需要它,以便只有一个存储库来掌管它们?例如:
class Repository<T>:IRepository<T> where T : class
{
private readonly ApplicationContext context;
private DbSet<T> entities;
public Repository(PrincipalServerContext context)
{
this.context = context;
entities = context.Set<T>();
}
public T Get(long id)
{
return entities.SingleOrDefault(s => s.IDUser == id);
//This does not work, IDUser isn't recognized
}
感谢您的帮助!