ASP.NET MVC与Entity Framework实体关系配置报错求助
问题原因
你重复配置了同一组实体关系——既从Flight端定义DepartureAirport与DepartingFlights的关联,又从Airport端再次配置相同的关系,导致EF Core尝试生成重复的外键列和约束,触发命名冲突错误。
同时你的代码存在两处小问题:
Airport类的配置中拼写错误:DeparturingFlights→ 应为DepartingFlightsFlight类的ArrivalAirport属性缺少分号:public Airport ArrivalAirport {get;set}→public Airport ArrivalAirport {get;set;}
解决方法
只需要保留单向的关系配置即可,无需两边重复定义。以下两种方案二选一:
方案一:保留Flight端的配置
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Flight>() .HasOne(f => f.DepartureAirport) .WithMany(a => a.DepartingFlights); modelBuilder.Entity<Flight>() .HasOne(f => f.ArrivalAirport) .WithMany(a => a.ArrivingFlights); base.OnModelCreating(modelBuilder); }
方案二:保留Airport端的配置(修正拼写错误后)
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Airport>() .HasMany(a => a.DepartingFlights) .WithOne(f => f.DepartureAirport); modelBuilder.Entity<Airport>() .HasMany(a => a.ArrivingFlights) .WithOne(j => j.ArrivalAirport); base.OnModelCreating(modelBuilder); }
同时记得修正Flight类里的语法错误:
public class Flight { [Key] public int FlightId {get; set;} public int Distance {get; set;} public float Duration {get; set;} public Airport DepartureAirport {get;set;} // 修正此处的分号 public Airport ArrivalAirport {get;set;} }
内容的提问来源于stack exchange,提问作者bunkki
相关产品推荐
相关产品推荐

