我在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; }
}
我创建了db context:
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应用程序中一样)。
编辑:感谢Frank,我发现了数据库,但是如何使其成为解决方案的一部分:
答案 0 :(得分:4)
如果您没有配置某个内容,那么您的数据库将位于 localdb 中。它与Visual Studio一起安装,您可以在此处找到它:菜单视图&gt; SQL Server对象资源管理器&gt;展开SQL Server&gt;展开所有(localdb)节点。你的数据库应该在那里。
数据库是,不要问我为什么,存储在您的用户文件夹中。在您的用户文件夹中。没有子目录。查看c:\ Users \ YourUserName \,应该有一些.mdf和.ldf文件。
修改强>
在命令行项目中嵌入数据库并不简单。
创建一个空的.mdf数据库或将现有数据库复制到项目中。要创建新项目,请右键单击您的项目&gt;添加&gt;新商品......&gt;数据&gt;基于服务的数据库。
如果需要,可以将其放在名为Data
的子目录中。请注意,无论何时构建应用程序,都会将此文件复制到构建目录中;你可以设置&#34;复制如果更新&#34;或&#34;永远不要复制&#34;在您喜欢的属性中。
将一个应用程序配置文件(app.config)添加到命令行项目中。实体框架安装可能已经为您创建了一个。
添加连接字符串:
<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
<强>利润强>