简体   繁体   English

实体框架-使用相同的DbContext和不同的连接字符串

[英]Entity Framework - using the same DbContext with different connection strings

I'm currently trying to use the same DbContext (I have two databases, of identical structure) in my application. 我目前正在尝试在应用程序中使用相同的DbContext(我有两个结构相同的数据库)。 I'm not quite sure what I'm doing wrong, but here's my current code - hopefully it should be pretty obvious what I'm trying to do. 我不太确定自己在做什么错,但是这是我当前的代码-希望它可以很明显地说明我要做什么。 I'm using EF Database First (which the error at the bottom seems not to suggest). 我正在使用EF Database First(底部的错误似乎并不建议)。

My context factory code: 我的上下文工厂代码:

public class HOLContextFactory
    {
        public static HOLDbEntities Create()
        {
            return new HOLDbEntities(); // Works
        }

        public static HOLDbQuoteEntities CreateQuote()
        {
            return new HOLDbQuoteEntities(); // Gives error
        }
    }

public partial class HOLDbQuoteEntities : HOLDbEntities
    {
        public HOLDbQuoteEntities()
            : base("HOLDbQuoteEntities") // This should send "HOLDbQuoteEntities" as the base connection string?! 
// Also tried "name=HOLDbQuoteEntities"
            {
            }
        }

Web.config connection strings: Web.config连接字符串:

<add name="HOLDbEntities" connectionString="metadata=res://*/HOLDbContext.csdl|res://*/HOLDbContext.ssdl|res://*/HOLDbContext.msl;provider=System.Data.SqlClient;provider connection string=<connstringdetails>" providerName="System.Data.EntityClient" />

<add name="HOLDbQuoteEntities" connectionString="metadata=res://*/HOLDbContext.csdl|res://*/HOLDbContext.ssdl|res://*/HOLDbContext.msl;provider=System.Data.SqlClient;provider connection string=<connstringdetails>" providerName="System.Data.EntityClient" /> // using diff database - same structure

Error I'm getting when using "HOLDbQuoteEntities" : 使用“ HOLDbQuoteEntities”时出现错误:

Code generated using the T4 templates for Database First and Model First development may not work correctly if used in Code First mode. 如果在Code First模式下使用T4模板为Database First和Model First开发生成的代码可能无法正常工作。 To continue using Database First or Model First ensure that the Entity Framework connection string is specified in the config file of executing application. 要继续使用数据库优先或模型优先,请确保在正在执行的应用程序的配置文件中指定了实体框架连接字符串。 To use these classes, that were generated from Database First or Model First, with Code First add any additional configuration using attributes or the DbModelBuilder API and then remove the code that throws this exception** 要使用从数据库优先或模型优先生成的这些类,并使用代码优先,请使用属性或DbModelBuilder API添加任何其他配置,然后删除引发此异常的代码**

Entity Framework needs to use the actual entities object: 实体框架需要使用实际的实体对象:

public class HOLContextFactory
{
    public static HOLDbEntities Create()
    {
        // default connection string
        return new HOLDbEntities(); 
    }

    public static HOLDbEntities CreateQuote()
    {
        // specified connection string
        return new HOLDbEntities ("HOLDbQuoteEntities"); 
    }
}

public partial class HOLDbEntities
{
    public HOLDbEntities(string connectionString)
        : base(connectionString) 
        {
        }
    }
}

I've done the same thing in one of my project. 我在一个项目中做过同样的事情。 I am creating my entity context using metadata=res://*/ 我正在使用metadata=res://*/创建我的实体上下文

Try this: 尝试这个:

<add name="HOLDbEntities" connectionString="metadata=res://*/;provider=System.Data.SqlClient;provider connection string=<connstringdetails>" providerName="System.Data.EntityClient" />

<add name="HOLDbQuoteEntities" connectionString="metadata=res://*/;provider=System.Data.SqlClient;provider connection string=<connstringdetails>" providerName="System.Data.EntityClient" /> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM