it-swarm.com.de

Probleme beim Erstellen einer Fremdschlüsselbeziehung in Entity Framework

ich habe Probleme beim Konfigurieren einer Fremdschlüsselbeziehung in meiner fließenden API für Entity Framework:

Hier ist der Kopf des Berichts:

 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; }
}

Dies ist das Detail des Berichts

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; }
}

Und das ist meine fließende API-Definition von beiden. Kopf des Berichts:

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");
    }

Detail des Berichts:

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);

    }

Bei der Ausführung erhalte ich immer diesen Fehler

System.Data.Entity.Edm.EdmAssociationType:: Multiplicity widerspricht der referenziellen Einschränkung in der Rolle 'Dettaglio_TEST_TABLE_Target' in der Beziehung 'Dettaglio_TEST_TABLE'. Da alle Eigenschaften in der abhängigen Rolle nicht nullwertfähig sind, muss die Multiplizität der Hauptrolle "1" sein.

Was bedeutet, dass ich bei der Definition von Fremdschlüsseln etwas falsch mache, aber ich weiß nicht, wo ich es wirklich sehen soll. Jede Hilfe/Hinweis wird sehr geschätzt.

39
user2541621

Es besteht ein Konflikt zwischen Ihrer Fremdschlüsseleigenschaft in der Klasse Dettaglio...

public virtual int IDTEST { get; set; }

... der einen nicht nullbaren Typ hat (int) und daher nicht optional sein kann und dein Mapping ...

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

... wo die Beziehung optional sein soll.

Wenn Sie in der Tat eine optionale Beziehung wünschen, verwenden Sie eine nullfähige FK-Eigenschaft:

public virtual int? IDTEST { get; set; }

Andernfalls müssen Sie HasRequired für eine erforderliche Beziehung mit einer nicht nullwertfähigen FK-Eigenschaft verwenden.

106
Slauma