【问题标题】:Entity Framework Core 1.1 and migrationEntity Framework Core 1.1 和迁移
【发布时间】:2017-10-27 00:44:59
【问题描述】:

我刚刚安装了 Microsoft Visual Studio 2017 社区并尝试了解最新技术。

我对 MVC 还不是很熟悉,对 EF Core 1.1 肯定也不熟悉。

我在 ASP.NET Core 和 EF Core 上学习了几门关于 Pluralsight 的课程,但自从录制这些记录以来,似乎发生了一些变化。

当我运行“Add-Migration Inital”连接数据库时,我总是得到:

System.InvalidOperationException:实体类型“类别”需要定义主键。 在 Microsoft.EntityFrameworkCore.Internal.ModelValidator.ShowError(字符串消息) 在 Microsoft.EntityFrameworkCore.Internal.ModelValidator.Validate(IModel 模型) 在 Microsoft.EntityFrameworkCore.Internal.RelationalModelValidator.Validate(IModel 模型) 在 Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.CreateModel(DbContext 上下文,IConventionSetBuilder 约定集生成器,IModelValidator 验证器) 在 System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey key, Func2 valueFactory) 在 Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel() 在 Microsoft.EntityFrameworkCore.Internal.LazyRef1.get_Value() at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite, ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass16_0.<RealizeService>b__0(ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetService[T](IServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitTransient(TransientCallSite transientCallSite, ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitTransient(TransientCallSite transientCallSite, ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass16_0.<RealizeService>b__0(ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider) at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(String name, String outputDir, String contextType) at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(String name, String outputDir, String contextType) at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_01.b__0() 在 Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(操作动作) 实体类型“类别”需要定义主键。

以下是一些相关代码:

Category.cs

public class Category
{
    [Key]
    public int CategoryId;
    public String CategoryName;
}

ICategoryRepository.cs

namespace Dokumentbasen6.Model
{
    public interface ICategoryRepository
    {
        IEnumerable<Category> Categories { get; }
        Category GetCategoryById(int CategoryId);
    }
}

CategoryRepository.cs

namespace Dokumentbasen6.Model
{
    public interface ICategoryRepository
    {
        IEnumerable<Category> Categories { get; }
        Category GetCategoryById(int CategoryId);
    }
}

DokumentbasenContext.cs

public class DokumentbasenContext : DbContext
{
    public DokumentbasenContext(DbContextOptions<DokumentbasenContext> options) : base(options)
    {

    }
    public DbSet<Document> Dokuments { get; set; }
    public DbSet<Category> Categories { get; set; }
    public DbSet<Standard> Standards { get; set; }
    public DbSet<Member> Members { get; set; }
}

在构建项目时,我使用了目标框架 .NETCoreApp 1.0,但现在我已将目标框架更改为 .NetCoreApp 1.1。

【问题讨论】:

    标签: asp.net-core entity-framework-core


    【解决方案1】:

    Microsoft.EntityFrameworkCore.Tools.DotNet 需要添加到您的项目中。右键单击项目并选择Edit *.csproj。然后,添加以下内容:

      <ItemGroup>
        <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0-preview2-final" />
      </ItemGroup>
    

    注意:该版本是本文发布时的最新版本,将来可能会发生变化。

    现在,您可以开始创建迁移了。转到您的项目的文件夹。最简单的方法是右键单击项目和Open Folder in File Explorer。然后,在File Explorer 的地址栏中键入cmd 以在该文件夹中打开命令提示符。

    现在使用以下命令创建迁移:

    dotnet ef migrations add InitialCreate -c DokumentbasenContext

    您现在应该在项目中看到一个Migrations 文件夹。

    【讨论】:

      猜你喜欢
      • 2019-01-11
      • 2018-11-05
      • 2020-03-09
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-16
      • 2018-03-20
      相关资源
      最近更新 更多