CodeFirst EF4.1 MVC针对遗留数据库 - 多重性冲突

Dav*_*d C 53 c# entity-framework ef-code-first asp.net-mvc-3

无论我把它混合在一起,都会给我带来错误.我有一种感觉,我错过了一些明显的东西,因为我不断收到这些错误.

在模型生成期间检测到一个或多个验证错误:

System.Data.Edm.EdmAssociationType :: Multiplicity与关系'Venue_Courses'中Role'Venue_Courses_Source'中的引用约束冲突.由于"从属角色"中的所有属性都是不可为空的,因此"主体角色"的多重性必须为"1".

System.Data.Edm.EdmAssociationEnd :: Multiplicity在关系'Venue_Courses'中的角色'Venue_Courses_Target'中无效.由于"从属角色"是指关键属性,因此从属角色的多重性的上限必须为1.

一个课程只能有一个场地,许多课程都可以使用场地

public class Course
{
    [Key]
    public virtual int Id { get; set; }
    public string Title { get; set; }
    public DateTime StartDate { get; set; }
    public int VenueId { get; set; }

    public virtual Venue Venue { get; set; }
}

public class Venue
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Course> Courses { get; set; }
}


protected override void OnModelCreating(DbModelBuilder modelBuilder)
{

    #region Courses
    //Table Alias
    modelBuilder.Entity<Course>().ToTable("DBSCHEMA.TR_COURSES");
    //Keys
    modelBuilder.Entity<Course>().HasKey(c => c.Id);
    //Joins
    //Join to Venues
    modelBuilder.Entity<Course>().HasOptional(c => c.Venue);

    //Fields
    modelBuilder.Entity<Course>().Property(c => c.Id).HasColumnName("COURSE_ID");
    modelBuilder.Entity<Course>().Property(c => c.Title).HasColumnName("CR_TITLE");
    modelBuilder.Entity<Course>().Property(c => c.StartDate).HasColumnName("START_DATE");
    modelBuilder.Entity<Course>().Property(c => c.VenueId).HasColumnName("VENUE_ID");
    #endregion


    #region Venues
    //Table Alias
    modelBuilder.Entity<Venue>().ToTable("DBSCHEMA.VENUES");
    //Keys
    modelBuilder.Entity<Venue>().HasKey(v => v.Id);
    //Joins
    modelBuilder.Entity<Venue>().HasMany(venue => venue.Courses);
    //Fields
    modelBuilder.Entity<Venue>().Property(v => v.Id).HasColumnName("VENUE_ID");
    modelBuilder.Entity<Venue>().Property(v => v.Name).HasColumnName("VENUE_NAME");
    #endregion

}
Run Code Online (Sandbox Code Playgroud)

Cla*_*ato 140

希望这仍然准时帮助你.我也遇到了完全相同的问题,并且几乎一个小时都在烦恼,直到我发现了我的错误.

问题是Course.Venue关系是可选的(如在流畅的API上声明的那样),但Id声明Course.VenueId是强制性的,因此您可以通过将VenueId更改为可选来使VenueId成为可选

public int? VenueId { get; set;}
Run Code Online (Sandbox Code Playgroud)

或者在Fluent API上将关系更改为必需,并且一旦更改了OnModelCreating就应该运行正常.

  • 非常感谢,我也很高兴我不是唯一一个!;) (4认同)