Подтвердить что ты не робот

CodeFirst EF4.1 MVC Против старой базы данных - Конфликты множественности

Независимо от того, каким образом я его смешиваю, это дает мне ошибки. У меня такое чувство, что я пропускаю что-то очевидное, поскольку я продолжаю получать эти ошибки.

Во время генерации модели были обнаружены одна или несколько ошибок проверки:

System.Data.Edm.EdmAssociationType:: Многократность конфликтует с реляционным ограничением в роли "Venue_Courses_Source" в отношении "Venue_Courses". Поскольку все свойства зависимой роли не имеют значения NULL, множественность главной роли должна быть "1".

System.Data.Edm.EdmAssociationEnd:: множественность недействительна в роли "Venue_Courses_Target" в отношении "Venue_Courses". Поскольку зависимая роль относится к ключевым свойствам, верхняя граница множественности зависимой роли должна быть равна 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

}
4b9b3361

Ответ 1

Надеюсь, это все еще вовремя, чтобы помочь вам. У меня тоже была такая же проблема, и я беспокоился об этом почти час, пока не смог обнаружить мою ошибку.

Проблема заключается в том, что отношение Course.Venue не является обязательным (как указано в свободном API), но объявление Id Course.VenueId является обязательным, поэтому вы можете сделать необязательным параметр VenueId, изменив его на

public int? VenueId { get; set;}

или измените отношение к обязательным для свободного API, и OnModelCreating должен работать нормально после того, как вы изменили это.

Ответ 2

После поиска в Интернете для

System.Data.Edm.EdmAssociationType:: Многократность конфликтует с реляционным ограничением в роли

Он продолжал следить за этим сообщением, поэтому вот моя проблема и решение:

Я обновил большой проект с ef4.0 до ef4.1, используя расширение vs ef reverse engineering. В нашем приложении mvc использовались метаданные и частичные части для украшения объектов ef4.0.

После удаления файлов метаданных проект начал работать.

Корневой проблемой был атрибут [Обязательный], поскольку объект ef poco имел значение NULL, и мой метаданный имел [Обязательный] в том же свойстве. Раньше было соблюдение правил проверки mvc, и теперь ef4.1 использовал для заполнения свойств навигации. Удаление [Требуется] off metadatatype устранило проблему.

public partial class AgentAgency
{
    public long OID { get; set; }
    public long? AgentOID { get; set; }
    public long? AgencyOID { get; set; }
    public string ReinsuranceYear { get; set; }
    public virtual Agency Agency { get; set; }
    public virtual Agent Agent { get; set; }
}

public class AgentAgencyMetadata
{
    public Int64 OID { get; set; }

    [Required]
    public Int64 AgentOID { get; set; }

    [Required]
    public Int64 AgencyOID { get; set; }
}

Ответ 3

Я боролся с этой ошибкой в ​​моем проекте фреймворка сущности, я решил проблему, изменив значение NULL, присвоенное значению.

Ответ 4

Убедитесь, что вы не используете HasKey() в сочетании с HasOptional() в ваших сопоставлениях. Это вызвало эту ошибку в моем случае.