首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >EntityFrameworkCore2.0添加-迁移不生成任何东西

EntityFrameworkCore2.0添加-迁移不生成任何东西
EN

Stack Overflow用户
提问于 2018-01-04 19:42:03
回答 2查看 15K关注 0票数 6

我对EF很陌生,我正在尝试使用VS 2017、.NET Core2.0和EF2.0创建一个简单的测试解决方案,但我无法通过添加迁移来创建迁移文件夹和初始迁移。

我用两个.Net核心类库项目创建了一个名为Driver的解决方案:

代码语言:javascript
运行
复制
Driver.Data
Driver.Domain

下面的软件包安装在Driver.Data中

代码语言:javascript
运行
复制
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools

Driver.Data有一个名为Driver.Context的cs文件。

代码语言:javascript
运行
复制
using Driver.Domain;
using Microsoft.EntityFrameworkCore;

namespace Driver.Data
{
    public class DriverContext : DbContext
    {
        public DbSet<Company> Companies { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(
                "Server=(localdb)\\mssqllocaldb; Database=Driver; Trusted_Connection=True;"
                );
        }
    }

}

Driver.Domain有一个名为Company.cs的cs文件。

代码语言:javascript
运行
复制
namespace Driver.Domain
{
    public class Company
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string City { get; set; }
        public string State { get; set; }
    }
}

我已经将启动项目设置为Driver.Data,在PM控制台中,我将默认项目设置为Driver.Data

下面是附加迁移init -verbose的输出。

代码语言:javascript
运行
复制
Using project 'Driver.Data'.
Using startup project 'Driver.Data'.
Build started...
Build succeeded.
C:\Program Files\dotnet\dotnet.exe exec --depsfile "C:\Users\alex.florin\Documents\Visual Studio 2017\Projects\Driver\trunk\Driver.Data\bin\Debug\netcoreapp2.0\Driver.Data.deps.json" --additionalprobingpath C:\Users\alex.florin\.nuget\packages --additionalprobingpath "C:\Program Files (x86)\Microsoft SDKs\NuGetPackagesFallback" --additionalprobingpath "C:\Program Files\dotnet\sdk\NuGetFallbackFolder" --fx-version 2.0 "C:\Program Files\dotnet\sdk\NuGetFallbackFolder\microsoft.entityframeworkcore.tools\2.0.1\tools\netcoreapp2.0\ef.dll" migrations add init --json --verbose --no-color --prefix-output --assembly "C:\Users\alex.florin\Documents\Visual Studio 2017\Projects\Driver\trunk\Driver.Data\bin\Debug\netcoreapp2.0\Driver.Data.dll" --startup-assembly "C:\Users\alex.florin\Documents\Visual Studio 2017\Projects\Driver\trunk\Driver.Data\bin\Debug\netcoreapp2.0\Driver.Data.dll" --project-dir "C:\Users\alex.florin\Documents\Visual Studio 2017\Projects\Driver\trunk\Driver.Data\\" --root-namespace Driver.Data

没有错误,但没有生成任何错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-05 08:44:49

@JulieLerman在她的pluralsight课程讨论中回答了我的问题。显然,在.NET核心类库中尝试这样做有问题。成功的解决方法是将以下内容放入DBContext项目的csproj文件中:

代码语言:javascript
运行
复制
<PropertyGroup>
  <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConf‌igurationFiles> 
</PropertyGroup>

她写了一个博客:http://thedatafarm.com/data-access/the-secret-to-running-ef-core-2-0-migrations-from-a-net-core-or-net-standard-class-library/

此外,请确保将项目中的DBContext设置为启动项目。

票数 19
EN

Stack Overflow用户

发布于 2018-01-04 22:21:57

当我试图让它正常工作时,我遇到了一些问题,就我而言,EFCore2.0还没有为黄金时段做好充分的准备,因为主要的dotnet核心命令无法发挥作用。除了您所做的,我还需要运行更多的东西才能让它在项目文件本身中工作。我遵循这两条线索:https://github.com/aspnet/Scaffolding/issues/645和Joe在这里的回答是:No executable found matching command "dotnet-ef"

从本质上说,它将什么也不做,或者给出一个非常基本的错误。结果是,Microsoft.EntityFrameworkCore.Tools.DotNet的连接不能正常工作,需要在我的.NET核心2项目的'ItemGroup‘中设置,如下所示:

代码语言:javascript
运行
复制
 <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.1" />
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.1" />
  </ItemGroup>

我还认为,您需要使用稍微不同的代码来使用dotnet调用“dotnet核心”命令的迁移。后面跟着“ef”。所以我只是在我的测试解决方案上做了这个:

代码语言:javascript
运行
复制
dotnet ef migrations add test

而且起作用了。在执行迁移或数据库更新命令时,必须在与项目相同的文件夹级别上。如果您仍然有困难,可以随意查看我在GitHub上创建的一个项目:

https://github.com/djangojazz/EFCoreTest/tree/master/EFCoreCodeFirstScaffolding

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48102431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档