我正在使用ASP.NET MVC和SQL Server 2012制作一个Intranet网站。我正在使用洋葱体系结构进行存储库和架构设计。我的问题是,我所在的公司已经有几个服务器数据库,其中表格之间没有任何关系。相反,有表格来映射这些关系。例如,一个表User和一个Document Document有一个表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继承。但这也意味着以关系方式重写整个数据库并手动映射每个数据库POCO(如果我错了,请纠正我),并且我没有技能来做到这一点(不同服务器数据库中有超过300个表而且我没有适当的知识和经验来做这种手术)。
有没有办法让我的原始数据库结构,仍然写一个通用储存库?如何去做这件事?
编辑澄清我的问题,因为@saeb部分回答我的问题。我可以有一个通用的回购没有我的数据库POCO父级?或者我需要它以便只有一个存储库来统治它们?例如:
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
}
感谢您的帮助!
你给Users'的'和'Documents'在数据库中正确的实例的更清洁的方式。一个用户可以有许多文档,所以你需要一个'User_joint_Document'联结表。这正是应该如何构建关系数据库的结构。 – melkisadek
但是,如果您使用的是洋葱体系结构,则会自动为您创建存储库,您只需在DataOnion中注册它们即可。 –
@melkisadek Bah!这就是我在DB上工作的糟糕之处。我会认为你会在两张桌子之间有类似1-1的关系或者类似的东西?也许那个rel'ship是一个真正的桌子?真的不是我强大的一面。如果我用ID创建父类,那么关系表会变成什么?由于它有IDDocument和IDUser,但现在我只能从父类 –