J'ai un certain nombre de types qui héritent de l'interface « IEventReportElement », qui expose la propriété « IdEventReport »:Avoir la configuration de propriété spécifique pour tous les types qui mettent en œuvre une interface à l'exception d'un
public interface IEventReportElement
{
long Id { get; set; }
long? IdEventReport { get; set; }
}
C'est un nullable, car je ne suis pas toujours capable de le remplir correctement tout de suite, mais ne devrait pas être nul dans la base de données.
est pourquoi j'ai ajouté la ligne
modelBuilder.Types<IEventReportElement>().Configure(x=>x.Property(y=>y.IdEventReport).IsRequired());
à ma méthode de OnModelCreating dans le DbContext. Toutefois, le type 'Position' doit implémenter cette interface, mais ne doit PAS avoir la colonne pour la propriété 'IdEventReport' dans la base de données, mais une colonne pour la propriété 'IdParent' qu'il expose.
public class Position : BOBase, IEventReportElement
{
public long? IdEventReport
{
get { return IdParent; }
set { IdParent = value; }
}
public long? IdParent { get; set; }
}
et la section du Modelbuilder
modelBuilder.Entity<Position>().Property(x => x.IdParent).IsRequired();
modelBuilder.Entity<Position>().Ignore(x => x.IdEventReport);
Cependant, cela jette une exception déjà en essayant de créer la base de données:
System.InvalidOperationException: La propriété 'IdEventReport' est pas une propriété déclarée sur le type "Position". Vérifiez que la propriété n'a pas été explicitement exclue du modèle en utilisant la méthode Ignore ou l'annotation de données NotMappedAttribute. Assurez-vous que c'est une propriété primitive valide.
Bien que cela puisse être valide, n'est-il pas possible de remplacer la configuration Type donnée pour un type spécifique? Dois-je ajouter la ligne .IsRequired() à tous les autres types qui implémente cette interface, ou existe-t-il un autre moyen de surmonter cela?
Je suppose que vous essayez de sélectionner 'Position.IdEventReport' dans la requête. est-ce correct? –
non, IdEventReport ne doit pas être inclus dans le modèle. IEventReportElement a d'autres propriétés importantes que je veux utiliser, je ne veux tout simplement pas utiliser cette propriété (dans la base de données). – DevilSuichiro