【问题标题】:Is it possible to make entities from two different edmx's map to the same class in Entity Framework?是否可以将来自两个不同 edmx 映射的实体映射到 Entity Framework 中的同一个类?
【发布时间】:2014-04-24 23:46:48
【问题描述】:

我被要求让我编写的程序与两个不同的数据提供者一起工作:MS SQL 和 Oracle。

我编写了两个单独的 edmx 文件:一个用于 MS SQL 数据库,一个用于 Oracle SQL 数据库。除了他们使用不同的数据提供者之外,数据的架构完全相同。

我现在有两个实体集和两个实体类。

由于类具有相同的属性,是否可以为两个实体集使用相同的 .net 类?

我认为这可能是可能的,因为当系统试图在不同的 edmx 文件中生成两个具有相同名称的类时,它产生了一个错误,指出属性被定义了多次!

【问题讨论】:

    标签: sql .net sql-server oracle entity-framework


    【解决方案1】:

    如果您的数据库架构完全相同,您可以使用一个配置了多个连接字符串的模型来解决此问题。

    为了使代码更简洁,您可以从为您的模型生成的上下文类中继承两个上下文类:

    public class MSSQLContext : YourGeneratedContext 
    { 
        public MSSQLContext() 
            : base("MSSQLDatabase") /*MS SQL connection string name in your config file*/
        { 
        } 
    }
    

    public class OracleContext : YourGeneratedContext 
    { 
        public OracleContext() 
            : base("OracleDatabase") /*Oracle connection string name in your config file*/
        { 
        } 
    }
    

    接下来,您可以在需要的地方创建MSSQLContextOracleContext 的实例,您也可以同时使用这两者..

    using(OracleContext mainContext = new OracleContext())
    {
        using(MSSQLContext mirrorContext = new MSSQLContext())
        {
    
        }
    }
    

    http://msdn.microsoft.com/en-us/data/jj592674.aspx

    【讨论】:

    • +1:有趣的答案,但我认为它不适用于我的特殊情况。我认为必须有两个不同的 edmx,因为它们使用不同的提供程序和两个不同的定义查询......还是我错了?
    • provider 是实体框架连接字符串的一部分。 msdn.microsoft.com/en-us/library/vstudio/…
    • defining queries 是什么意思?
    • 如果模式相同,则模型 (edmx) 将相同。唯一的区别是连接字符串,可以像@Andrew 显示的那样通过两个上下文来处理。另一种方法,也是我之前使用过的一种方法,有一个上下文,它在连接字符串的构造函数中接受一个字符串。
    • 是的,传递给构造函数的不同连接字符串实际上是一种机制,我基于我的实现。不过,我更喜欢类型化的上下文,代码看起来更简洁,因为您不必关心要传递的额外参数……它总是在一个地方。不过,这是个人品味的问题;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多