【问题标题】:One edmx file, multiple databases with different implementation - support mapping details一个edmx文件,多个不同实现的数据库——支持映射细节
【发布时间】:2014-03-01 17:52:49
【问题描述】:

我有概念(领域)模型,它在不同的数据库中以不同的方式实现。 例如,第一个数据库中的继承是每个类型的表,第二个 - 具体类型是表,第三个 - 所有类型的属性都合并到一个表中。类似的东西:Mapping objects to relational databases

另外,我有两个不同的数据访问层(目前)——第一个是使用实体框架 5——数据库优先方法,第二个是 ADO.NET 动态 DAL,我有我的 DB 命令工厂。

客户端应用程序将使用这些数据库,客户端应在启动时选择:

  1. 要连接的数据库(连接字符串)和
  2. 数据访问层(EF 或经典 ADO.NET)使用数据。

根据客户的选择,系统应使用指定的数据库,并选择 DAL。

我的问题是:

  1. 如何管理 Entity Framework 以根据连接字符串(第一个连接字符串 - 三个表、第二个两个、第三个等)执行不同的(动态)映射细节并将它们映射到相同的实体?
  2. 根据您的经验,我还有什么需要注意的吗?

【问题讨论】:

  • 您是连接到相同类型的数据库(SQL Server、Oracle 等)还是它们是不同的技术。他们都有相同的桌子和桌子设计吗?
  • 所有数据库都在 MS SQL Server 上。表格不一样,我在上面发布了链接 - 例如。对于相同的概念 - 继承模型,在每个数据库中以不同的方式实现继承。

标签: c# entity-framework ado.net database-first


【解决方案1】:

这可能太简单了。创建一个继承自所有三个基类的通用类。 EDMX 中的数据库类始终是分部类,因此在同一名称空间中创建另一个分部类,否则为空。使用您的分部类生成接口。

您可以创建一个域类:

public class myCommonClass : IDatabaseClass1, DatabaseClass2, DatabaseClass3

然后在您的应用程序中使用 myCommonClass。然后,您可以使用 Automapper 在数据库类和域类之间进行切换。 Automapper 生活在here

这是一个星期天的早晨,所以回复可能有点粗略,而且你可能已经做了很多这样的事情,但是......

【讨论】:

  • 彼得,谢谢您的回复。恐怕我的问题比你的回答要粗略一些。 :) 我已经有类似的东西,我试图避免使用 Automapper。现在,我的主要问题是如何让所有三种不同的映射(来自 EDMX)使用相同的实体 - 多个 EDMX,一个实体。
  • 嗨 Olinad,我相信单个实体不可能来自多个来源;您的存储库层需要知道它正在与哪个物理数据库通信。另外,我发现 Automapper 是一款出色的工具 - 您有什么保留意见?
  • automapper 的问题是它可能是一个多层并且对整个事物的引用,我想让它更简单。彼得,请看一下我提到上述问题的新问题。 stackoverflow.com/questions/22137905/…
猜你喜欢
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-21
  • 2011-03-27
  • 2011-06-03
  • 2011-06-15
相关资源
最近更新 更多