【问题标题】:Single Connection String with Multiple Entity Framework Models(Data First)具有多个实体框架模型的单个连接字符串(数据优先)
【发布时间】:2016-12-03 20:37:01
【问题描述】:

我有 3 个不同的项目,它们各自的 EF 实体数据模型指向同一个数据库。我不想在每个项目的 app.config 文件中保存连接字符串,但想在我的模型之间共享它。

我在 stackoverflow 上看到了这个链接How to share a connection string between multiple entity data model

但问题在于,如果我要更新 EF 模型,它将覆盖 EF 模型上下文中的代码,并且它将继承自 DbContext 而不是 BaseContext。

请帮助我如何解决这个问题。

【问题讨论】:

  • EF生成的类是部分的。只需将修改后的构造函数以及“帮助程序”代码放入另一个文件中,该文件扩展生成的文件。这样您就不必担心 EF 会覆盖您的自定义代码。
  • @Xeun:感谢您的及时响应,但现在当我尝试在 .Net Framework 4.5 中运行示例时,我收到警告警告 CS0618 'Database.DefaultConnectionFactory' 已过时:'默认连接工厂应该是在配置文件中设置或使用 DbConfiguration 类。 (见go.microsoft.com/fwlink/?LinkId=260883)'那么使用与链接stackoverflow.com/questions/10266923/…中相同的方法是否仍然很好,或者有更好的方法。
  • 我不是您在答案中显示的解决方案的忠实拥护者。在您的情况下,它只是过时的连接工厂,让我给您看一个代码示例,我会写一个答案
  • 编辑:我想我把你的问题弄错了。使用 Bassams 方法可能会更好。
  • @Xeun:没问题,谢谢你的帮助 :-)

标签: entity-framework connection-string


【解决方案1】:

您必须将连接字符串移动到单独的配置文件中:

ConnectionStrings.config

<?xml version="1.0" encoding="utf-8" ?>
<connectionStrings>
  <add name="connectionString"
       connectionString="Integrated Security=SSPI; Persist Security Info=False; Initial Catalog=DbName; Data Source=.\SQLExpress;"
       providerName="System.Data.SqlClient" />
</connectionStrings>

修改连接字符串以符合您的要求。

然后您可以像这样与您的所有项目共享它:

1) 打开您的 App.config(此文件可在您的项目中找到)

2) 在&lt;/configSections&gt;后面的某处添加此行代码

 ...
 <connectionStrings configSource="ConnectionStrings.config"/>
 ...

configSource 中的技巧:

“获取或设置定义相关配置节的包含文件的名称,如果这样的文件存在的话。” https://msdn.microsoft.com/en-us/library/system.configuration.sectioninformation.configsource(v=vs.110).aspx

会发生什么:

  • 必须先复制ConnectionStrings.config

  • 所有 YourApplicationName.config 都将引用共享连接字符串配置文件。

如果项目没有任何 App.config 则只需添加它!或者您也可以使用 ConfigurationSettings 手动加载。

这是在 app.configs 之间共享数据库配置的最佳方式,当您更改例如 Sql Server 名称时,您只需修改 ConnectionStrings.config 而不是所有 App.configs!

【讨论】:

  • 感谢您的回复,但在我的项目中,ConnectionStrings.config 文件位于一个常见的 DAL 项目中,并且每个 EF 数据模型都有不同的项目。那么 app.config 文件中文件的路径是什么。请建议。我收到错误消息:附加信息:在应用程序配置文件中找不到名为“ABC_Entity”的连接字符串。
  • 对于一切正常的概念教授,只需将 ConnectionStrings.config 不带任何路径并手动复制到您的 bin\Release 或 Debug 目录。当您确定它正在工作时,然后将 ConnectionString.config 添加到您的基础架构组件并在属性窗口中选择复制到输出目录 |始终复制或尝试将其放在根目录中的某个位置并使用 ..\..\... 引用它 --> 我不确定此引用如何工作,但您必须尝试一下。
  • @ Bassam:我遇到的问题是由于原因:stackoverflow.com/questions/12622408/… 但是当我这样做时,即使从我的项目的 app.config 文件中删除了连接字符串,它也会从网络中选择连接字符串项目。这是否解决了我的问题或者我有一些问题。请提出建议。
  • 如果您正确配置了您的 app.config 或 web.config,那么一切都应该正常工作,您应该不会收到此错误消息。你需要在你的 web.config/app.config 文件 section = "entityFramework"... 你有吗?然后在标签 之后,您需要添加 文件 connectionStrings.config 应该与您的配置文件 Relese\MyWeb.Config => 位于同一目录中连接字符串。
【解决方案2】:

它解析为总是从 MVC 项目中选择的连接字符串,并且所有其他类库项目都自动引用它。

【讨论】:

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