如何将数据库文件导入到使用实体框架的C#控制台应用程序的解决方案中
我在C#中创建了控制台应用程序。我已经为这个解决方案安装了NuGet的EntityFramework 我有班如何将数据库文件导入到使用实体框架的C#控制台应用程序的解决方案中,c#,entity-framework,console-application,C#,Entity Framework,Console Application,我在C#中创建了控制台应用程序。我已经为这个解决方案安装了NuGet的EntityFramework 我有班人: public class Person { public int Id { get; set; } public string LastName { get; set; } public string FirstName { get; set; } public DateTime BirthDate { get;
人
:
public class Person {
public int Id { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public DateTime BirthDate { get; set; }
}
我已经创建了db上下文:
public class ApplicationDbContext : DbContext {
public ApplicationDbContext()
: base("MiniProjekt") { }
public DbSet<Person> Persons { get; set; }
}
问题是我不知道数据库中的.mdf
文件在哪里。我单击了“在解决方案资源管理器中显示所有文件”,查看了我的项目文件,但找不到它。我想稍后通过邮件发送此项目,我想在解决方案中保留数据库文件
问题:如何将数据库文件导入到我的控制台应用程序中,以便解决方案资源管理器(如ASP.NET-MVC应用程序)可以使用该文件
编辑:感谢Frank,我找到了数据库,但如何使其成为解决方案的一部分:
如果您没有配置任何东西,您的数据库将位于localdb中。它与Visual Studio一起安装,您可以在此处找到它:菜单视图>SQL Server对象资源管理器>展开SQL Server>展开所有(localdb)节点。你的数据库应该在那里 不要问我为什么,数据库存储在您的用户文件夹中。就在您的用户文件夹中。没有子目录。在c:\Users\YourUserName\中,应该有一些.mdf和.ldf文件 编辑:
<connectionStrings>
<add name="YourContextClassName" connectionString="Server=(localdb)\ProjectsV12;Integrated Security=true;AttachDbFileName=|DataDirectory|YourDatabase.mdf;" providerName="System.Data.SqlClient" />
</connectionStrings>
static YourContextClassName()
{
var baseDir = AppDomain.CurrentDomain.BaseDirectory;
// You might Path.Combine(baseDir, "Data") here, if you want to have a
// data subdirectory.
var fullPath = Path.GetFullPath(baseDir);
AppDomain.CurrentDomain.SetData("DataDirectory", fullPath);
}
在命令行项目中嵌入数据库并不简单
Data
的子目录中。请注意,无论何时构建应用程序,此文件都将复制到构建目录中;您可以根据自己的喜好在属性中设置“更新时复制”或“从不复制”<connectionStrings>
<add name="YourContextClassName" connectionString="Server=(localdb)\ProjectsV12;Integrated Security=true;AttachDbFileName=|DataDirectory|YourDatabase.mdf;" providerName="System.Data.SqlClient" />
</connectionStrings>
static YourContextClassName()
{
var baseDir = AppDomain.CurrentDomain.BaseDirectory;
// You might Path.Combine(baseDir, "Data") here, if you want to have a
// data subdirectory.
var fullPath = Path.GetFullPath(baseDir);
AppDomain.CurrentDomain.SetData("DataDirectory", fullPath);
}
这将告诉我们的应用程序连接字符串中的| DataDirectory |是什么显示您的连接字符串。@haim770有趣的是,没有连接字符串。没有web配置等。我就是找不到此数据库。如果要指定
.mdf
文件的位置,必须创建一个连接字符串并指定位置(AttachDBFilename=| DataDirectory | \db.mdf
)。您还可以使用C#创建(或操作)连接字符串,然后将其传递给DbContext
构造函数。对于控制台应用程序,您必须显式配置DataDirectory
,请参阅不一定是LocalDB,它也可以是本地SQL Express实例。谢谢,我找到了它,但如何使它成为解决方案的一部分,我的意思是将它存储在解决方案目录中,所以,当我在运行应用程序时发送项目时,它会在解决方案中查找数据库。我可以创建Web.config或类似的东西吗?@Yoda抱歉,我遇到了格式问题。再看一遍。好的,我得到无法将文件'C:\Users\s8359\u 000\Documents\Visual Studio 2013\Projects\Projekt5-kopia\Projekt5\bin\Debug\Baza.mdf'作为数据库'Baza'附加。
所以我可能应该将路径设置为C:\Users\s8359\u 000\Documents\Visual Studio 2013\Projects\Projekt5-kopia\Projekt5\Baza.mdf
,但我找不到如何获取解决方案根目录。