我正在尝试在我的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不兼容
我似乎无法找到任何这些错误的示例/解决方案。
我已经设法通过向DNX Core 5.0程序集以及DNX 4.5.1程序集添加EntityFramework.dll引用来识别DbModelBuilder,但是,现在它已经抛出了更多想要添加System.Core和mscorlib的错误。我真的无法相信创建一个(我认为很简单的)Web API项目会有多麻烦。
答案 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);
}
}