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

Car*_*lis 16 .net c# sql-server entity-framework

我的应用程序使用两个不同的SQL 2008数据库 数据库有几个具有相同名称的表,即.Users.我想将EF4用于这两个数据库.但是,当我运行我的应用程序并且它遇到第二个数据库的objectcontext创建时,我收到以下错误:

名称为"User"的多个类型存在于不同名称空间中的EdmItemCollection中.基于约定的映射需要唯一的名称,而不考虑EdmItemCollection中EdmItemCollectionto命名空间中的命名空间

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

PS其中一个模型是设计者生成的并使用POCO类,另一个是从数据库中推断出来并与EF紧密耦合.

Leb*_*ses 22

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

1)使用通配符连接字符串导致冲突:

    metadata=res://*/Repositories.EntityFramework.Model.csdl|res://*/Repositories.EntityFramework.Model.ssdl|res://*/Repositories.EntityFramework.Model.msl;
Run Code Online (Sandbox Code Playgroud)

由于*不适用于您的项目,您可以定义多个连接字符串以对包含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);
    }
Run Code Online (Sandbox Code Playgroud)

2017年更新:

    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))
Run Code Online (Sandbox Code Playgroud)


Dir*_*aus 10

错误意味着,他说:你不能在你的场景中使用默认的基于约定的映射.请改用自定义数据库映射.Scott Guthrie有一个关于的详细博客项目.