j'ai du mal à configurer une relation de clé étrangère dans mon Api couramment Entity Framework:
Voici la tête du rapport:
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; }
}
Ceci est le détail du rapport
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; }
}
Et voici ma définition courante de l'API des deux. Responsable du rapport:
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");
}
Détail du rapport:
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);
}
À l'exécution, j'obtiens toujours cette erreur
System.Data.Entity.Edm.EdmAssociationType:: la multiplicité entre en conflit avec la contrainte référentielle dans le rôle 'Dettaglio_TEST_TABLE_Target' dans la relation 'Dettaglio_TEST_TABLE'. Étant donné que toutes les propriétés du rôle dépendant ne peuvent pas être annulées, la multiplicité du rôle principal doit être "1".
Ce qui, je suppose, signifie que j'échoue quelque chose à la définition de la clé étrangère, mais je ne sais pas vraiment où regarder. Toute aide/indice est très apprécié.
Il existe un conflit entre votre propriété de clé étrangère dans la classe Dettaglio
...
public virtual int IDTEST { get; set; }
... qui a un type non nullable (int
) et ne peut donc pas être optionnel et votre mappage ...
this.HasOptional(t => t.TEST_TABLE) //...
... où vous souhaitez que la relation soit facultative.
Si vous voulez en effet une relation facultative, utilisez une propriété FK nullable:
public virtual int? IDTEST { get; set; }
Sinon, vous devez utiliser HasRequired
pour une relation requise avec une propriété FK non nullable.