无法将DbModelBuilder和.HasRequired()添加到modelBuilder

时间:2016-02-17 22:46:50

标签: entity-framework ef-model-builder

我正在尝试在我的API中创建一个ModelBuilder,但似乎无法将.HasRequired()添加到我的代码中。我假设这是因为它存在于DBModelBuilder内,但是,我也不能添加它。

它只允许我使用ModelBuilder。 否则会抛出错误:OnModelCreating(DbModelBuilder): no suitable method found to override

我在这里错过了什么吗?

我的DbContext看起来像这样:

public class TicketContext : DbContext
    {
        public DbSet<Tickets> Tickets { get; set; }
        public DbSet<Users> Users { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder) // <-- Not allowing me to add DbModelBuilder here
        {
            modelBuilder.Entity<Tickets>().HasRequired(t => t.Users);

        }
    }

更新

我(作为测试)从头开始了一个新项目。我使用Web API模板创建了一个新的ASP.NET 5.0项目。直接我的项目没有认识DbModelBuilder。我添加了对EntityFramework.dll的引用,但仍然没有用。然后我添加了using System.Data.Entity;,然后接受了DbModelBuilder,但仍抱怨名称空间&#39; DbModelBuilder&#39;无法找到。

我无法理解如何在一个全新的项目中预先出现此错误?

当我尝试从NuGet添加包Entity Framework时,我得到更多错误,版本6.1.3与DNX Core 5.0不兼容

我似乎无法找到任何这些错误的示例/解决方案。

更新2

我已经设法通过向DNX Core 5.0程序集以及DNX 4.5.1程序集添加EntityFramework.dll引用来识别DbModelBuilder,但是,现在它已经抛出了更多想要添加System.Core和mscorlib的错误。我真的无法相信创建一个(我认为很简单的)Web API项目会有多麻烦。

1 个答案:

答案 0 :(得分:0)

您不能只从模型构建器调用HasRequired - 您需要指明要更改的实体:

public class MyContext: DbContext 
{ 
    public DbSet<Foo> Foos { get; set; } 
    public DbSet<Bar> Bars { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
        modelBuilder.Entity<Foo>().HasRequired(f => f.Bar);   // assumes Bar navigation added to Foo
    } 
} 

https://msdn.microsoft.com/en-us/data/jj591617.aspx?f=255&MSPPError=-2147217396

我喜欢做的是将我的流畅代码分开:

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
       modelBuilder.Configurations.Add(new FooConfig());
    } 

现在我可以创建一个包含该实体的所有映射的类:

public class FooConfig : EntityTypeConfiguration<Foo>
{
    public FooConfig()
    {
        // Primary Key
        this.HasKey(t => t.FooId);

        // Relationships
        this.HasRequired(f => f.Bar).WithMany(b => b.Foos);

    }
}