c# - 如何将数据库文件导入到使用 Entity Framework 的 C# 控制台应用程序的解决方案中

标签 c# entity-framework console-application

我在 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 应用程序中一样)。

编辑:多亏了弗兰克,我找到了数据库,但如何使它成为解决方案的一部分:

enter image description here

最佳答案

如果你没有配置任何东西,你的数据库将在 localdb 中。它与 Visual Studio 一起安装,您可以在此处找到它:菜单 View > SQL Server 对象资源管理器 > 展开 SQL Server > 展开所有 (localdb) 节点。您的数据库应该在那里。

不要问我为什么,数据库存储在您的用户文件夹中。就在您的用户文件夹中。没有子目录。查看c:\Users\YourUserName\,应该有一些.mdf和.ldf文件。

编辑:

将数据库嵌入命令行项目并不简单。

  1. 创建一个空的 .mdf 数据库或将现有数据库复制到您的项目中。要创建一个新的,请右键单击您的项目 > 添加 > 新项目... > 数据 > 基于服务的数据库。

    如果需要,您可以将它放在名为 Data 的子目录中。请注意,每当您构建应用程序时,此文件都会被复制到您的构建目录中;您可以根据自己的喜好在属性中设置“如果较新则复制”或“从不复制”。

  2. 将应用程序配置文件 (app.config) 添加到您的命令行项目。 Entity Framework 安装可能已经为您创建了一个。

  3. 添加连接字符串:

    <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 文件的名称。

  4. 添加一些代码来定义 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|在连接字符串中。

  5. 部署 LocalDB。确保 LocalDB 以某种方式进入您客户的计算机。 MSDN might help .

  6. 利润

关于c# - 如何将数据库文件导入到使用 Entity Framework 的 C# 控制台应用程序的解决方案中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27708856/

相关文章:

c# - Entity Framework - 类似属性的表达

c# - 无法从静态方法调用函数

c# - 使用 SQLite 从 60K 数据中删除 50 条记录需要更多时间(17560 ms)

entity-framework - Windows Azure : Web Page, 移动服务和 SQL

c# - 用于查找包含整数数组中所有元素的所有对象的表达式

c# - 使用常量参数在 Entity Framework 中映射 SQL 函数

c# - 如何将进度条与进程同步

javascript - 如何获取 Angular 应用程序中的所有控制台错误消息

c# - 将数据读取器与 sqltransactions 一起使用

c# - MVC id 值始终为 null