我在 C# 中创建了控制台应用程序。我已为此解决方案安装了 NuGet Entity Framework 。
我有类 Person
:
public class Person {
public int Id { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public DateTime BirthDate { get; set; }
}
我已经创建了数据库上下文:
public class ApplicationDbContext : DbContext {
public ApplicationDbContext()
: base("MiniProjekt") { }
public DbSet<Person> Persons { get; set; }
}
在程序包管理器控制台中启用迁移。数据库连接正常。我得到了下面代码的有效数据(我之前插入了一些对象),但我不知道数据库在哪里。
static void Main(string[] args) {
var context = new ApplicationDbContext();
Console.WriteLine(context.Persons.Count());
foreach (Person person in context.Persons) {
Console.WriteLine(person.LastName);
}
Console.ReadKey();
}
问题是我不知道数据库中的.mdf
文件在哪里。我在解决方案资源管理器中单击了显示所有文件,浏览了我的项目文件,但找不到它。我想稍后通过邮件发送这个项目,我想在解决方案中保留数据库文件。
问题:如何将数据库文件导入我的控制台应用程序,以便解决方案资源管理器可以使用它(就像在 ASP.NET-MVC 应用程序中一样)。
编辑:多亏了弗兰克,我找到了数据库,但如何使它成为解决方案的一部分:
最佳答案
如果你没有配置任何东西,你的数据库将在 localdb 中。它与 Visual Studio 一起安装,您可以在此处找到它:菜单 View > SQL Server 对象资源管理器 > 展开 SQL Server > 展开所有 (localdb) 节点。您的数据库应该在那里。
不要问我为什么,数据库存储在您的用户文件夹中。就在您的用户文件夹中。没有子目录。查看c:\Users\YourUserName\,应该有一些.mdf和.ldf文件。
编辑:
将数据库嵌入命令行项目并不简单。
创建一个空的 .mdf 数据库或将现有数据库复制到您的项目中。要创建一个新的,请右键单击您的项目 > 添加 > 新项目... > 数据 > 基于服务的数据库。
如果需要,您可以将它放在名为
Data
的子目录中。请注意,每当您构建应用程序时,此文件都会被复制到您的构建目录中;您可以根据自己的喜好在属性中设置“如果较新则复制”或“从不复制”。将应用程序配置文件 (app.config) 添加到您的命令行项目。 Entity Framework 安装可能已经为您创建了一个。
添加连接字符串:
<connectionStrings> <add name="YourContextClassName" connectionString="Server=(localdb)\ProjectsV12;Integrated Security=true;AttachDbFileName=|DataDirectory|YourDatabase.mdf;" providerName="System.Data.SqlClient" /> </connectionStrings>
YourContextClassName
:您的 DbContext 的名称。(localdb)\ProjectsV12
:localdb SQL Server 的实例名称。这应该与您的客户的 localdb 安装的实例名称相匹配。YourDatabase.mdf
:您在第 1 步中创建/复制的 mdf 文件的名称。添加一些代码来定义 DataDirectory 变量:
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|在连接字符串中。
部署 LocalDB。确保 LocalDB 以某种方式进入您客户的计算机。 MSDN might help .
利润。
关于c# - 如何将数据库文件导入到使用 Entity Framework 的 C# 控制台应用程序的解决方案中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27708856/