代码之家  ›  专栏  ›  技术社区  ›  Carvellis

在不同的实体框架模型中不能有相同的表名?

  •  16
  • Carvellis  · 技术社区  · 14 年前

    Users . 我想对这两个数据库都使用EF4。但是,当我运行我的应用程序并点击第二个数据库的objectcontext创建时,我得到以下错误:

    存在“用户”名称的多个类型 名称空间。基于约定的映射 不考虑需要唯一的名称 到EdmItemCollection中的命名空间到EdmItemCollection中的命名空间

    这是否意味着我不能在同一个应用程序中使用(部分)具有相同表名的两个数据库?它们位于不同的名称空间、不同的edmx模型、不同的项目等。

    P、 其中一个模型是由设计器生成并使用POCO类,另一个是从数据库中推断出来的,并且与EF紧密耦合。

    5 回复  |  直到 14 年前
        1
  •  10
  •   Dirk Brockhaus    14 年前

    这个错误意味着,他说:你不能使用 默认的基于约定的映射 在你的情况下。使用 自定义数据库映射 相反。Scott Guthrie有一个关于 this

        2
  •  22
  •   Leblanc Meneses    8 年前

    要使用“基于默认约定的映射”,以下两种方法将起作用:

    (一) 冲突是由使用通配符的连接字符串引起的:

        metadata=res://*/Repositories.EntityFramework.Model.csdl|res://*/Repositories.EntityFramework.Model.ssdl|res://*/Repositories.EntityFramework.Model.msl;
    

    由于*不起作用,您可以定义多个连接字符串来硬编码包含edmx的程序集。

    2) 创建助手

        public static EntityConnection GetEfConnectionString(this string sqlConnectionString)
        {
            var cs = string.Format(@"metadata=res://{0}/Repositories.EntityFramework.Model.csdl|res://{0}/Repositories.EntityFramework.Model.ssdl|res://{0}/Repositories.EntityFramework.Model.msl;provider=System.Data.SqlClient;provider connection string=""" + sqlConnectionString + @"""",
                Assembly.GetCallingAssembly().FullName
            );
    
            return new EntityConnection(cs);
        }
    

        public static string GetEfConnectionString(this string sqlConnectionString, Type type)
        {
            string cs =
                string.Format(
                    @"metadata=res://{0}/Models.Model.csdl|res://{0}/Models.Model.ssdl|res://{0}/Models.Model.msl;provider=System.Data.SqlClient;provider connection string=""" +
                    sqlConnectionString + @"""",
                    type.Assembly.FullName
                    );
            return cs;
        }
    
    
        // usage: don't "new" EntityConnection.  See 2012 comment.
        string connString = ConfigurationManager.ConnectionStrings["sqlConnection"].ConnectionString.GetEfConnectionString();
        using(var entities = new XyzEntities(connString))
    
        3
  •  1
  •   user3728728    9 年前

    解决了所有问题!

        4
  •  0
  •   Juan    7 年前

        5
  •  0
  •   Ankush Madankar    6 年前

    对于DB first方法,幸运的是有两个非常简单的解决方法:

    1. 确保两个上下文不共享具有相同表的表 名称-不是最实用的方法。
    2. 在自己的程序集中隔离数据库上下文。

    更多细节请参考 link

    解释得很清楚。