【问题标题】:Can I use one connection string to use multiple databases with the same table structure in Entity Framework?我可以使用一个连接字符串在 Entity Framework 中使用具有相同表结构的多个数据库吗?
【发布时间】:2015-12-22 01:08:20
【问题描述】:

我有一个 web api 应用程序,它有自己的数据库。 Web api 应用程序将数据分发到其分支机构的数据库。分支数据库的表结构都相同,但每个数据库在web.config中都有自己的连接字符串

<add name="Branch" connectionString="metadata=res://*/Models.HOGC.csdl|res://*/Models.HOGC.ssdl|res://*/Models.HOGC.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(local);initial catalog=GC_BranchName;user id=sa;password=Qwer0987;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
<add name="Branch_1" connectionString="metadata=res://*/Models.HOGC.csdl|res://*/Models.HOGC.ssdl|res://*/Models.HOGC.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(local);initial catalog=GC_BranchName_1;user id=sa;password=Qwer0987;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

我首先使用实体​​框架数据库,然后使用 dbcontext 路由我的数据

public HOGCEntities(string connString)
        : base("name=" + connString)

我的主数据库表中有一个分支列表。它包含连接字符串的名称和数据库/目录的名称 (Branch_1 & GC_BranchName_1)。

我想知道的是,我可以只使用一个连接字符串而不是手动或以编程方式创建另一个具有相同属性的连接字符串吗?比如循环遍历我的分支表来路由我的数据?

【问题讨论】:

  • 您可以在上下文的构造函数中输入完整的连接字符串,而不是连接字符串名称。因此,您可以使用一个 CS 作为模板,并根据您要访问的数据库对其稍作修改。
  • @GertArnold 完整的连接字符串?真的吗?所以它会是 base("name=generatedfromaloop connectionstring=stringtemplate")?

标签: c# entity-framework


【解决方案1】:

“如何使用同一个地址给住在不同地方的几个人寄明信片?”

嗯,你不能。

连接字符串是数据库的“地址”,如果您有多个数据库,则每个数据库都需要一个特定的连接字符串。

但是,如果数据库具有相同的结构,您可以为所有数据库使用相同的实体模型和相同的业务类。


配置设置

如果您提供带有目录名称占位符的模板连接字符串,则可以在 web.config 中使用相同的连接字符串设置:

<add name="Branch"
   connectionString=
       "...provider=...;data source=(local);initial catalog={0};..." providerName="..." />

其中“{0}”是占位符。

public HOGCEntities(string catalog)
    : base(String.Format(ConfigurationManager.ConnectionStrings["Branch"].ConnectionString,
                         catalog)
          )

您还需要对程序集 System.Configuration.dll 和 using System.Configuration; 的引用。


某些数据库允许您创建数据库链接。通过使用它们,您可以将卫星数据库链接到主数据库。但这会导致访问具有相同名称的不同表的问题。我不知道如何将同一个业务类依次映射到不同的表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多