2017-05-26 161 views
1

我刚刚安装了Microsoft Visual Studio 2017社区,并试图获得最新技术。实体框架核心1.1和迁移

我对MVC还不熟悉,绝对不熟悉EF Core 1.1。

我已经参加了有关ASP.NET Core和EF Core上的Pluralsight的一些课程,但是看起来这些录制之后有所变化。

当我运行“添加 - 迁移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 conventionSetBuilder,IModelValidator验证器) 在System.Collections.Concurrent.ConcurrentDictionary 2.GetOrAdd(TKey key, Func 2 valueFactory) 在Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel() 在Microsoft.EntityFrameworkCore.Internal。 LazyRef 1.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_0 1.b__0() at Microsoft.EntityFrameworkCore.Design.OperationExecutor.Opera tionBase.Execute(Action action) 实体类型'Category'需要定义一个主键。

这里有一些相关的代码:

Category.cs

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

ICategoryRepository.cs

命名空间Dokumentbasen6.Model { 公共接口ICategoryRepository { IEnumerable的分类{获取; } 类别GetCategoryById(int CategoryId); }}

CategoryRepository.cs

namespace Dokumentbasen6.Model 

{ 公共接口ICategoryRepository { IEnumerable的分类{获取; } 类别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。

在此之前,非常感谢您的支持!

亲切的问候,

乔恩·哈康Ariansen

回答

0

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文件夹中的项目。