在带有Fluent API的Entity Framework 6中配置ASP.NET中的一对多关系

问题描述

我在迁移之前遇到错误

Book中的导航属性引号配置为有冲突 自治市

请帮助!

public partial class Book 
{ 
    public virtual ICollection<Quote> Quotes { get; set; } 
} 

public partial class Quote
{ 
    public virtual Book Book { get; set; }  
}

//Fluent Api 

modelBuilder.Entity<Quote>() 
    .HasOptional(b => b.Book); 

modelBuilder.Entity<Book>() 
    .HasMany<Quote>(s => s.Quotes) 
    .Withrequired(s => s.Book) 
    .HasForeignKey<int>(s => s.QuoteBookID);

解决方法

您写了

modelBuilder.Entity<Quote>() 
    .HasOptional(b => b.Book); 

modelBuilder.Entity<Book>() 
    .HasMany<Quote>(s => s.Quotes) 
    .WithRequired(s => s.Book) 
    .HasForeignKey<int>(s => s.QuoteBookID);

其中描述了一种自相矛盾的事务状态。 Quote.Book既不是必需的,也不是可选的,因此我们必须下定决心。

如果需要的话

modelBuilder.Entity<Book>() 
    .HasMany(s => s.Quotes) 
    .WithRequired(s => s.Book)
    .HasForeignKey(s => s.QuoteBookID);

是所有必要的。我们不需要配置可选性

id,它是可选的

modelBuilder.Entity<Book>() 
    .HasMany(s => s.Quotes) 
    .WithOptional(s => s.Book)
    .HasForeignKey(s => s.QuoteBookID);

请注意,我删除了显式类型参数,因为它们是不必要的。

我们可以进一步清理并编写

modelBuilder.Entity<Book>() 
    .HasMany(s => s.Quotes) 
    .WithOptional() // or .WithRequired()
    .HasForeignKey(s => s.QuoteBookID);

因为不需要过于具体