Je suis en train de mettre en place un modèle Entity Framework avec une option: relation en option:Entity Framework en option: relation en option
Dans ma situation, parfois existe un enregistrement AdditionalData qui pointe vers un record BaseTable, mais parfois BaseTable ou Les enregistrements AdditionalData existent sans aucun lien. La clé étrangère à la BaseTable (si elle existe) est sur la table AdditionalData. Je veux être en mesure de naviguer entre BaseTable et toute autre AdditionalDatas qui pourrait être connectée.
BaseTable 0..1 ----- 0..1 AdditionalData1
\
--- 0..1 AdditionalData2
public class BaseTable {
public int Id { get; set; }
public virtual AdditionalType1 AdditionalType1 { get; set; }
public virtual AdditionalType2 AdditionalType2 { get; set; }
}
public class AdditionalType1 {
public int Id { get; set; }
public int? BaseTableId { get; set; }
public virtual BaseTable BaseTable { get; set; }
}
public class AdditionalType2 {
public int Id { get; set; }
public int? BaseTableId { get; set; }
public virtual BaseTable BaseTable { get; set; }
}
Comment puis-je faire ce travail? Je suis aussi loin que:
modelBuilder.Entity<AdditionalType1>()
.HasOptional(zmt => zmt.BaseTable)
.WithOptionalDependent(zm => zm.AdditionalType1)
.Map(a => a.MapKey("BaseTableId"));
modelBuilder.Entity<AdditionalType2>()
.HasOptional(zmt => zmt.BaseTable)
.WithOptionalDependent(zm => zm.AdditionalType2)
.Map(a => a.MapKey("BaseTableId"));
mais il me dit ceci:
error: (1564,6) : error 0019: Each property name in a type must be unique. Property name 'BaseTableId' was already defined.
Je ne sais pas exactement ce qui se réfère à, et ne sais pas comment résoudre.
EDIT: Si je retire la carte/clauses MapKey comme le suggère ici (https://stackoverflow.com/a/8016308/237091) Je reçois cette erreur au lieu, lorsqu'une requête est exécutée qui l'utilise:
Invalid column name 'BaseTable_Id' as it maps itself to BaseTable_Id automatically instead of my BaseTableId field.
'Parfois, une BaseTable existe' Soit vous voulez créer des lignes dans la table de base pour les utilisateurs, soit vous avez une très mauvaise compréhension du fonctionnement des bases de données. Ce n'est pas comme le chat de Schrodinger, si votre base de données a une table à déterminer au moment du design. – MrFox
@Mr Fox: Edité pour clarification - Je parlais d'enregistrements, pas de l'existence réelle de la table. –