Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将数据库文件导入到使用实体框架的C#控制台应用程序的解决方案中_C#_Entity Framework_Console Application - Fatal编程技术网

如何将数据库文件导入到使用实体框架的C#控制台应用程序的解决方案中

如何将数据库文件导入到使用实体框架的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;

我在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; 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);
}
在命令行项目中嵌入数据库并不简单

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

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

  • 将应用程序配置文件(app.config)添加到命令行项目中。实体框架安装可能已经为您创建了一个

  • 添加连接字符串:

    <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 |是什么

  • 部署LocalDB。确保LocalDB以某种方式进入客户端的机器

  • 利润


  • 显示您的连接字符串。@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
    ,但我找不到如何获取解决方案根目录。