ASP.NET EFCodeFirst 未使用正确的连接字符串

Posted

技术标签:

【中文标题】ASP.NET EFCodeFirst 未使用正确的连接字符串【英文标题】:ASP.NET EFCodeFirst not using correct connection string 【发布时间】:2011-02-25 15:02:39 【问题描述】:

我正在尝试使用带有 SQL Server 2008 后端的 ASP.NET MVC3 EF 和 CODEFIRST 发布网站。在我的本地机器上,我使用 sql express db 进行开发,但现在我正在直播,我想使用我的托管生产数据库。问题是当我尝试运行应用程序时,它仍在使用我的本地数据库连接字符串。我已经从我的 web.config 文件中完全删除了旧的连接字符串,并且在创建新的连接字符串之前使用了 <clear /> 标记。我也清理了解决方案并重建了,但不知何故它仍然连接到旧数据库。我错过了什么?

这是新的连接字符串:

  <connectionStrings>
    <clear />
    <add name="CellularAutomataDBContext"
         connectionString=" Server=XXX;
         Database=CellularAutomata; User ID=XXX; Password=XXX; Trusted_Connection=False" 
         providerName="System.Data.SqlClient" />  
  </connectionStrings>

更新

当我调试并查看 DBCONTEXT 对象时,它的连接显示如下:

Data Source=.\\SQLEXPRESS;Initial Catalog=CellularAutomata.Models.D1K2N3CARuleDBContext;Integrated Security=True;MultipleActiveResultSets=True"

我不确定为什么会发生这种情况,因为我在任何地方都找不到它被设置为这个。此外,在配置下它说 LazyLoadingEnabled = true,我认为这可能是问题的一部分,也许它没有加载新的连接字符串。在哪里更改这些参数?

更新 2

EFCodeFirst 使用默认连接字符串,我不知道如何让它接受我在 web.config 文件中指定的连接字符串。

【问题讨论】:

我认为,除非您的本地计算机实际上具有您在连接字符串中明确使用的静态 IP 地址,否则我看不到已发布的应用程序将如何连接到它。您是否在 AppData 文件夹中创建了数据库?你要发布那个文件夹吗? @Lirik,我没有在连接字符串中使用任何 IP 地址,EFCodeFirst 负责数据库的创建。我真的不知道为什么会这样。 @Doug S. 所以这可能意味着 Web 应用程序没有连接到本地计算机上的数据库......您是否也在发布 AppData 文件夹? AppData 文件夹中有什么东西吗? @Lirik,AppData 文件夹中没有任何内容。 @Doug S. DOH!抱歉,我一直以为您在已发布的网站上看到了这个问题,而不是您在本地机器上运行/调试它时看到了这个问题......请忽略我以前的 cmets! 【参考方案1】:

因此,在使用 EF CodeFirst 时,它使用了一个默认连接字符串。如果您希望能够使用自定义连接字符串,则必须遵循一些参数指南。

name ="this must match the name of your database context class"
connectionString="Server=yourserverurl; Database=yourdatabasename; User ID=youruserid; 
Password=yourpassword; Initial Catalog=the name of the database to use;
Trusted_Connection=False"
providerName="System.Data.SqlClient"

到目前为止,这对我有用。

【讨论】:

【参考方案2】:

您显示的 connectionString 不是 EF 连接字符串。 EF 不会使用它。所以你改错了。

EF connectionString 将包括 providerName="System.Data.EntityClient"

【讨论】:

我不太确定当时发生了什么。我肯定会使用 EFCodeFirst,这是我能找到的唯一连接字符串。旧的使用相同的提供程序名称并且工作得很好。 我没有意识到。我认为 Code-First 只是实体框架的一部分。 是的。但它不需要 EDMX 文件。因此,您显示的连接字符串 有效的。但我想知道你是否正在改变正确的。如果您有多个程序集,请在其他地方查找名称相似的连接字符串。【参考方案3】:

它将查找与您的上下文相同的名称,具体取决于您的其他内容 也在使用其他名称。我通常使用以下来控制 具有相同或特定连接字符串的特定功能 (例如,我将应用服务保存在不同的数据库中,以便 EFCF 可以根据需要删除表):

<connectionStrings>
  <add name="MyAppContext" .../>
  <add name="ApplicationServices" .../>
  <add name="DefaultConnection" .../>
</connectionStrings>

【讨论】:

以上是关于ASP.NET EFCodeFirst 未使用正确的连接字符串的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net Core Identity 未正确验证令牌到期 [重复]

在 docker 上运行的 asp.net 核心未正确编码拉丁字符

ASP.NET MVC 3 EF 代码优先 - 掌握详细信息 CRUD

ASP.NET Web API:返回 401/未授权响应的正确方法

ASP.NET 5 项目未正确定位 .NET 4.6.1 且无法调试

如何让asp.net成员提供者和实体框架共享同一个数据库