将数据库移动到App_Data文件夹后更改连接字符串?

时间:2017-01-05 05:49:50

标签: c# sql-server entity-framework asp.net-mvc-4 web-config

我正在努力学习mvc.net。我创建了一个小项目,其中我使用了模型第一种方法。问题是我希望我的数据库显示在App_data文件夹中,因为我遵循了这篇文章:

http://www.dotnetfunda.com/articles/show/2182/how-to-embed-sql-database-in-appdata-folder

简而言之,我分离了数据库,然后将数据库包含在app_data文件夹中。现在我在更改连接字符串时遇到问题,以前我使用实体框架自动生成连接字符串,它就像:

<add name="KeepitrememberEntities" 
connectionString="metadata=res://*/EDM.csdl|res://*/EDM.ssdl|res://*/EDM.msl;
provider=System.Data.SqlClient;provider connection string=&quot;
data source=mypcname\SQLEXPRESS;initial catalog=Keepitremember;
integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" 
providerName="System.Data.EntityClient" />

现在我将其更改为:

<add name="KeepitrememberEntities"
connectionString="Data Source=mypcname\SQLEXPRESS;
AttachDbFilename=|DataDirectory|Keepitremember.mdf;Integrated Security=True;
User Instance=True"
providerName="System.Data.SqlClient" />

当我执行代码并尝试使用表单保存值时,它会向我显示 EDM.Context.cs 中的错误,错误是:

  

类型的例外   'System.Data.Entity.Infrastructure.UnintentionalCodeFirstException'   发生在Emptymvc.dll中但未在用户代码中处理

     

附加信息:使用Database First的T4模板生成的代码   如果在Code中使用,则Model First开发可能无法正常工作   第一种模式。要继续使用Database First或Model First,请确保   在配置中指定了Entity Framework连接字符串   执行申请的文件。要使用这些类,那就是   从Database First或Model First生成,Code First添加任何   使用属性或DbModelBuilder API的其他配置   然后删除引发此异常的代码。

我现在需要做什么,任何解决方案!

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

据我所知,第一个连接字符串是Entity Framework连接字符串,第二个连接字符串是SQL Express连接字符串。在EF项目中,它们都应存在于web.config DbContext文件中以及代码生成模板用法中 - 因此它们不可互换(即,您不应将EF连接字符串更改为SQL Express一个,反之亦然)。

由于您已经更改了包含CSDL,SSDL和EXDL的EF连接字符串。 EF进入SQL Express所需的MSL信息,EF假定现有数据库元数据不再存在并尝试创建像Code First这样的新数据库,因此在执行UnintentionalCodeFirstException后触发OnModelCreating方法

而不是在web.config中更改EF连接字符串,只需在与此相同的connectionStrings元素上添加 SQL Express连接字符串(您可能需要在以后定义初始目录名称)所需的):

<connectionStrings>
    <!-- SQL Express connection string -->
    <add name="KeepitrememberConnection"
    connectionString="Data Source=mypcname\SQLEXPRESS;Initial Catalog=Keepitremember;
    AttachDbFilename=|DataDirectory|Keepitremember.mdf;Integrated Security=True;
    User Instance=True"
    providerName="System.Data.SqlClient" />

    <!-- EF connection string -->
    <add name="KeepitrememberEntities" 
    connectionString="metadata=res://*/EDM.csdl|res://*/EDM.ssdl|res://*/EDM.msl;
    provider=System.Data.SqlClient;provider connection string=&quot;
    data source=mypcname\SQLEXPRESS;initial catalog=Keepitremember;
    integrated security=True;MultipleActiveResultSets=True App=EntityFramework&quot;" 
    providerName="System.Data.EntityClient" />
</connectionStrings>

注意:连接字符串名称应与相同,并且在EF模型生成模式中具有预定义名称。

相关问题:

Model First with DbContext, Fails to initialize new DataBase

Code generated using the T4 templates for Database First and Model First development may not work correctly if used in Code First mode

Entity Framework cant use the DbContext, model being created