Visual Studio 2017 using EF Core change local database default location for mdf file before/after migration

时光怂恿深爱的人放手 提交于 2020-05-29 04:37:06

问题


I may need help with the title of my question. So here is more detail.

In VS2015 I when creating a database using code first migrations, After completing my first migration I was able to view the database in VS by going to the App_Data folder and clicking on the MDF file. It would then open in Server Explorer.

However, in VS2017 I no longer have an App_Data folder and when I did my first migration it took a bit of work to find out where my MDF file was located.

If you don't know here are the steps I used to locate it:

After doing the add-migration and update-database.

Go to View->SQL Server Object Explorer

Under SQL Server look for you (localdb)\MSSQLLocalDB->Databases->name of your databases should show in your appsettings.json connection string. Probably starts with aspnet-[db name]-[bunch of numbers and letters]

I right clicked on this database and went to properties. Under "Current Connection Parameters" is the path to the MDF file.

The current location is "C:/user/username"

So my question is how do I set this to a different default location? I would like my MDF files to show in the Data folder or something similar that is in my project folder.

If this question has been asked. I apologize I tried rewording my question about 20 times to figure out if someone already asked it. I will quickly remove this question if it has already been asked in a way that is unfamiliar to me.


回答1:


Ok, so for Entity Framework Core, it is a bit more involved. You can open your db in SQL Server Object Explorer in Visual Studio (or in Sql Management Studio) and create your database where you want it using a SQL query.

create database test on (name='test', filename='c:\Projects\test.mdf');

And then reference it using (LocalDb) the way you normally would in the connection string:

appsettings.json

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

And then this test runs correctly

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();
        }
    }
}

So you're still using the same server, but you're placing the database in the folder you want.

In action:



来源:https://stackoverflow.com/questions/43709499/visual-studio-2017-using-ef-core-change-local-database-default-location-for-mdf

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!