1

J'ai un modèle de domaine spécifiant les interfaces ou mon domaine et j'utilise DI pour l'associer à une implémentation de référentiel d'infrastructure 4 framework. Dans mon domaine, je donne les résultats suivants:Problèmes d'héritage d'interface dans une relation un-à-plusieurs dans Entity Framework

public interface IInboundGateway : IGateway 
{ 
    ICollection<IInboundNumber> InboundNumbers { get; set; } 
} 

J'ai alors mon modèle-cadre de l'entité qui a généré la classe InboundGateway:

public partial class InboundGateway : EntityObject 
{ 
    public EntityCollection<InboundNumber> InboundNumbers { get; set; } 
} 

Afin de mettre en œuvre l'inteface IInboundGateway j'ai créé une classe InboundGateway partielle.

public partial class InboundGateway : IInboundGateway 
{ 
} 

Eventhough EntityCollection <> implémente ICollection <> et InboundNumber implémente IInboundNumber j'obtiens une erreur de déclaration que InboundGateway ne met pas en œuvre IInboundGateway.InboundNumbers d'interface, car InboundGateway.InboundNumbers n'a pas le type de retour correspondant ICollection<IInboundNumber>

Je suis assez certain que c'est mental car EntityCollection implémente ICollection et InboundNumber implémente IInboundNumber.

Toute aide serait massivement appréciée merci.

Répondre

1

Vous devez être conscient que EntityCollection<InboundNumber> est un sous-type de ICollection<InboundNumber> mais n'est pas un sous-type de ICollection<IInboundNumber>. Ce sont 2 types différents et ne sont pas liés.

donc dans la classe d'objets d'entité que vous avez:

public EntityCollection<InboundNumber> InboundNumbers { get; set; } 

Alors que le comopiler vous attend à ce que:

public ICollection<IInboundNumber> InboundNumbers { get; set; } 


Si vous pouvez transformer vos EntityObjects Poco, une partie du problème serait résolu puisque les classes POCO utilisent ICollection pour leurs propriétés de navigation par défaut. En outre, vous devez changer votre interface comme ceci:

public interface IInboundGateway : IGateway { 
    ICollection InboundNumbers { get; set; } 
} 
+0

Certes, compte tenu du fait que InboundNumbers est également partialed héritant IInboundNumber signifie que le compilateur peut voir qui hérite InboundNumber IInboundNumber? Non? –

+1

Non, comme je l'ai dit même si InboundNumbers implémente IInboundNumber mais vous ne pouvez pas retourner ICollection où ICollection est requis. S'il vous plaît noter que * Covariance * ne fonctionne pas dans les génériques ce qui signifie que la liste n'est pas un sous-type de la liste . –

Questions connexes