在迁移之前/之后,使用EF Core的Visual Studio 2017更改mdf文件的本地数据库默认位置

vgw*_*rdx 4 c# ef-migrations entity-framework-core visual-studio-2017

我的问题标题可能需要帮助。所以这里有更多细节。

在VS2015中,使用代码首次迁移创建数据库时,在完成第一次迁移后,我可以通过转到App_Data文件夹并单击MDF文件来在VS中查看数据库。然后,它将在服务器资源管理器中打开。

但是,在VS2017中,我不再有App_Data文件夹,当我进行第一次迁移时,它花费了一些时间来找出我的MDF文件所在的位置。

如果您不知道这是我用来查找它的步骤:

完成添加迁移和更新数据库之后。

转到视图-> SQL Server对象资源管理器

在SQL Server下,查找您的(localdb)\ MSSQLLocalDB-> Databases->数据库名称应显示在appsettings.json连接字符串中。可能以aspnet- [数据库名称]-[数字和字母串]开头

我右键单击该数据库,然后转到属性。在“当前连接参数”下是MDF文件的路径。

当前位置是“ C:/用户/用户名”

所以我的问题是如何将其设置为其他默认位置?我希望将MDF文件显示在Data文件夹或项目文件夹中的类似文件中。

如果已经问过这个问题。抱歉,我尝试将问题重新措词约20次,以弄清楚是否有人已经提出过。如果已经以我不熟悉的方式提出了这个问题,我将迅速删除它。

Aus*_*ley 6

好的,所以对于Entity Framework Core,它涉及的更多。您可以SQL Server Object Explorer在Visual Studio(或Sql Management Studio)中打开数据库,并使用SQL查询在需要的位置创建数据库。

create database test on (name='test', filename='c:\Projects\test.mdf');
Run Code Online (Sandbox Code Playgroud)

然后使用(LocalDb)引用它,就像通常在连接字符串中一样:

appsettings.json

{
    "ConnectionStrings": {
        "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=test;Trusted_Connection=True;MultipleActiveResultSets=true"
    }
}
Run Code Online (Sandbox Code Playgroud)

然后此测试正确运行

Program.cs

using System;
using System.IO;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);

            IConfigurationRoot configuration = builder.Build();

            var optionsBuilder = new DbContextOptionsBuilder();

            optionsBuilder.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));

            var context = new DbContext(optionsBuilder.Options);

            context.Database.EnsureCreated();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,您仍在使用同一台服务器,但是将数据库放置在所需的文件夹中。

实际上: 在此处输入图片说明

  • 解决方案是正确的。还是想指出,它与EF Core无关。在 SqlServer 中创建新数据库但未指定文件时,MDF 文件将在为给定服务器设置的默认位置中创建。请参阅 https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/view-or-change-the-default-locations-for-data-and-log-files EF 只是调用服务器来创建文件。使用上面的解决方案,您将明确指定文件的位置并告诉服务器它在哪里。EF 只与服务器实例对话,而不与文件交互。 (2认同)