无论我以哪种方式混合它,都会给我带来错误。当我不断遇到这些错误时,我有一种明显的缺失。

一门类(class)只能有一个 field ,许多类(class)可以使用该 field

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

}

最佳答案

希望这仍然能按时为您提供帮助。我也遇到了完全相同的问题,并且一直困扰着近一个小时,直到发现错误为止。

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

public int? VenueId { get; set;}

或在fluent API上将关系更改为强制性,并且更改后OnModelCreating应该可以正常运行。

关于c# - 针对遗留数据库的代码优先EF 4.1 MVC-多重性冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8007129/

10-10 18:42