0

我正在尝试在我的 API 中创建模型构建器,但似乎无法添加.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,但仍然抱怨找不到命名空间“DbModelBuilder”。

我不明白我怎么能在一个全新的项目中预先出现这个错误?

一旦我尝试从 NuGet 添加包 Entity Framework,我就会收到更多错误,即版本 6.1.3 与 DNX Core 5.0 不兼容

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

更新 2

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

4

1 回答 1

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

    }
}
于 2016-02-17T22:55:32.767 回答