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

Проблемы, связанные с созданием отношений внешнего ключа на платформе Entity Framework

У меня возникли проблемы с настройкой отношения внешнего ключа в моей Entity Framework, свободной от Api:

Вот глава отчета:

 public class Testata
{
    public Testata() { Details = new List<Dettaglio>(); }
    public virtual int IDTEST { get; set; }
    public virtual string Value { get; set; }
    public virtual int IDDETAIL { get; set; }
    public virtual string IDTESTALT { get; set; }
    public virtual byte[] BLOB { get; set; }

    public virtual IList<Dettaglio> Details { get; set; }
}

Это подробный отчет

public class Dettaglio
{
    public virtual int IDDETAIL { get; set; }
    public virtual int IDTEST { get; set; }
    public virtual string DSDETAIL { get; set; }

    public virtual Testata TEST_TABLE { get; set; }
}

И это мое свободное API-определение обоих. Руководитель отчета:

public TEST_TABLEMap()
    {
        // Primary Key
        this.HasKey(t => t.IDTEST)
            .Property(t => t.IDTEST)
            .IsRequired()
            .HasColumnType("Int")
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
            .HasColumnName("IDTEST");


        // Table & Column Mappings
        this.ToTable("TEST_TABLE");
        this.Property(t => t.Value).HasColumnName("DSVALUETEST");
        this.Property(t => t.IDTESTALT).HasColumnName("IDTESTALT");
        this.Property(t => t.BLOB).HasColumnName("BLOB");
    }

Подробности отчета:

public TEST_DETAILMap()
    {
        // Primary Key
        this.HasKey(t => t.DSDETAIL);

        // Properties
        this.Property(t => t.DSDETAIL);

        // Table & Column Mappings
        this.ToTable("TEST_DETAIL");
        this.Property(t => t.IDDETAIL).HasColumnName("IDDETAIL");
        // this.Property(t => t.IDTEST).HasColumnName("IDTEST");
        this.Property(t => t.DSDETAIL).HasColumnName("DSDETAIL");

        // Relationships
        this.HasOptional(t => t.TEST_TABLE)
            .WithMany(t => t.Details)
            .HasForeignKey(d => d.IDDETAIL).WillCascadeOnDelete(true);

    }

При выполнении я всегда получаю эту ошибку

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

Что, я думаю, означает, что я терплю что-то в определении внешнего ключа, но я действительно не знаю, на что смотреть. Любая помощь/подсказка очень ценится.

4b9b3361

Ответ 1

Существует конфликт между свойством внешнего ключа в классе Dettaglio...

public virtual int IDTEST { get; set; }

... который имеет тип с нулевым значением (int) и поэтому не может быть необязательным и ваше сопоставление...

this.HasOptional(t => t.TEST_TABLE) //...

... где вы хотите, чтобы отношение было необязательным.

Если вы действительно хотите, чтобы дополнительное отношение использовало свойство FK с нулевым значением:

public virtual int? IDTEST { get; set; }

В противном случае вы должны использовать HasRequired для требуемой связи с невообразимым свойством FK.