C# 实体框架LocalDB连接字符串

C# 实体框架LocalDB连接字符串,c#,entity-framework,tsql,visual-studio-2013,mdf,C#,Entity Framework,Tsql,Visual Studio 2013,Mdf,我发现很难理解VisualStudio中的实体框架是如何处理LocalDB的 在我的项目根文件夹中有一个.mdf数据库文件,我们称之为MyDatabase.mdf 我在我的WPF应用程序中使用MVVM模式,因此在我的Model文件夹中,我添加了一个ADO.NET实体数据模型(代码首先来自数据库) 现在在服务器浏览器视图中,我总是向这个MyDatabase.mdf添加一个数据连接,从这里我至少可以对数据库进行一些控制(比如执行EmptyDatabase过程或其他任何操作) 现在最烦人的事情是,每当

我发现很难理解VisualStudio中的实体框架是如何处理LocalDB的

在我的项目根文件夹中有一个
.mdf
数据库文件,我们称之为
MyDatabase.mdf

我在我的WPF应用程序中使用MVVM模式,因此在我的
Model
文件夹中,我添加了一个ADO.NET实体数据模型(代码首先来自数据库)

现在在服务器浏览器视图中,我总是向这个
MyDatabase.mdf
添加一个数据连接,从这里我至少可以对数据库进行一些控制(比如执行
EmptyDatabase
过程或其他任何操作)

现在最烦人的事情是,每当我运行我的项目时,不知何故在Debug文件夹下会创建一个新的
MyDatabase.mdf
,其中没有数据

app.config
中有以下标记:

<connectionStrings>
    <add name="DysphagiaModel"
         connectionString="data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\DysphagiaDB.mdf;integrated security=True;connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework"
         providerName="System.Data.SqlClient" />
  </connectionStrings>

我只是不明白为什么实体框架是这样工作的,而且我发现很难找到适合新手的好文档。我习惯于使用PHP和MySQL,这比这个简单得多。所以这真的非常令人沮丧,我无法想象我是唯一一个在理解VisualStudio(和EF)如何工作以及底层机制如何工作方面有这些问题的人

大多数文章和文档已经假设您了解一些机制,它们不会帮助您参考您需要了解的内容


无论如何,对于这个特定问题,如何让我的项目使用我在项目根文件夹中的数据库?

在开发过程中,Visual Studio每次为调试/发布模式重建应用程序时都会创建数据库(和其他文件)的副本。正如Adriano所发布的,这将在每次运行新应用程序时创建一个新的mdf文件(它将重建您的应用程序)

如果不希望每次都发生这种情况,可以更改“复制到输出”属性并选择(“不复制”或“复制到更新的版本”)。为此,您需要打开解决方案资源管理器,右键单击mdf文件,转到属性并更改“复制到输出目录”


如果希望在调试模式下访问“插入”的数据,则可以在SQL Server对象资源管理器上的bin/debug/[yourdb].mdf上引用localdb副本,或创建新的数据连接(不建议使用最后一个)。但是请记住,每次重新启动调试时,都会重新开始,除非您更改了权限。

由于SQL Server(即
.mdf
文件和“LocalDB”实际上是基于服务器的方法,因此您应该将数据库放在服务器上,并在那里创建它,只要使用服务器上的逻辑数据库名称访问它,不要再摆弄那些被复制的文件之类的东西……这不是EF而是VS。相信我……这大大简化了您的开发。每次生成应用程序时,所有项目文件(标记为复制到输出)都将被复制(设置也将被清除)。这将帮助您在每次运行新的应用程序时运行(否则您可能会调试/检查上一次运行的某些内容,结果可能会受到影响)。此外,如果应用程序崩溃,留下不一致的数据,您的下一次运行将正常工作。为了避免只在更新时才将数据库标记为复制(请参见文件属性)。回顾3年来的情况,我发现我在这方面缺乏知识。正如评论中所建议的,最好在服务器上使用数据库。但是,我可以想象一些罕见的情况,您希望将数据库部署为本地
.mdf
文件。