具有公共表的多个DbContexts - >继承基础上下文(数据库优先)

时间:2016-06-16 02:03:33

标签: c# asp.net-mvc entity-framework dbcontext

我有一个网络应用程序(ERP品种)有90个表并且正在计数。我正在使用Entity Framework 6和数据库第一种方法。我想拆分DBContext并创建多个DBContexts。但是你如何处理这两种常见的表格呢?即,拥有一个共同的背景并从中继承是否有意义?你能做到吗?

FinancialsContext : CommonContext
 - InvoiceHeader
 - InvoiceDetail

OrderManagementContext : CommonContext
 - OrderHeader
 - OrderDetail

CommonContext
  - User
  - Item

这是否允许您直接访问通过CommonContext相关的相关表属性...如:OrderHeader.User.FirstName

如果这不起作用,还有其他建议吗?

更新1 - 继承不起作用: 我尝试了这种方法,发现相关实体是从FinancialsContext到CommonContext建立的。即您无法访问修改OrderHeader的用户的名字,如:OrderHeader.User.FirstName

所以我猜你需要在每个域的上下文中复制Common business对象,如下所示:

FinancialsContext
 - InvoiceHeader
 - InvoiceDetail
 - User
 - Item

OrderManagementContext
 - OrderHeader
 - OrderDetail
 - User
 - Item

我错过了什么吗?

更新2 所以我想在多个上下文中使用相同的表也不起作用...至少不是没有重命名它们因此它们的名称是唯一的,我不想这样做。

Schema specified is not valid. Errors: 
The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM type 'CustomerContact'. Previously found CLR type 'OTIS.Domain.Financials.CustomerContact', newly found CLR type 'OTIS.Domain.InventoryMgmt.CustomerContact'.
The mapping of CLR type to EDM type is ambiguous because multiple CLR types match the EDM type 'OrderDetail'. Previously found CLR type 'OTIS.Domain.Financials.OrderDetail', newly found CLR type 'OTIS.Domain.InventoryMgmt.OrderDetail'.

我找到this SO answer,对我来说,似乎我会放弃单独的dbcontexts,除非这些表真的只在一个上下文中使用(就像我的一些系统管理员相关的表)。

我没有看到任何有关性能影响的真实统计数据,因为在dbcontext中有许多表并且不得不做一些不自然的事情,例如从2个上下文查询然后在内存中加入结果,不值得麻烦并且权衡较小的性能,但是多个上下文,然后必须执行性能降级,如2个单独的查询并加入它们。

0 个答案:

没有答案