2016-09-13 6 views
2

J'utilise Entity Framework 6.1 comme ORM. Je souhaite configurer une relation un-à-plusieurs entre les entités Rule et Code. Je veux le faire avec une classe wrapper intermédiaire appelée RuleParameters. En outre, je ne souhaite pas que cet objet wrapper soit représenté dans la base de données.Comment configurer une relation un-à-plusieurs avec la classe wrapper intermédiaire dans Entity Framework

Est-ce possible avec EF? Si oui, quelle annotation/configuration d'api fluide suis-je absent?

Voici ma configuration. Je montre des annotations ici sur api fluide pour être concis.

public class Rule 
{ 
    public Rule() 
    { 
     Parameters = new RuleParameters(); 
    } 

    public int RuleId { get; set; } 

    [NotMapped] 
    public RuleParameters Parameters { get; set; } 

} 

public class RuleParameters 
{ 
    public virtual IList<Code> Codes; 
} 

public Code 
{ 
    public int CodeId { get; set; } 

    public int RuleId { get; set; } 

    [ForeignKey("RuleId")] 
    public Rule Rule { get; set; } 

} 

problèmes que j'ai rencontrés:

  • RuleParameters est pas une entité si je veux naturellement de le traiter comme un type complexe, mais ne peut pas en raison de l'association Codes(1/2)(2/2).
  • Cacher RuleParameters wrapper de EF tout en configurant simultanément la relation un-à-plusieurs semble contradictoire.
+0

@GertArnold '[NotMapped]' sert à masquer 'RuleParameters'. Il semble que cela fasse aussi cacher toute sorte de relations que je veux configurer entre les entités, donc la contradiction :( – Mantzel

+0

Eh bien, vous ne pouvez pas cacher 'RuleParameters', vous devez le mapper comme un type complexe, soit par le API, ou par une annotation de données –

Répondre

0

Pourquoi voulez-vous utiliser une classe intermédiaire? Effectuez la relation sans la classe intermédiaire.

public class Rule 
{ 
    public Rule() 
    { 
     Codes = new HashSet<Code>(); 
    } 

    public int RuleId { get; set; } 

    public ICollection<Code> Codes { get; set; } 
} 

public Code 
{ 
    public int CodeId { get; set; } 

    public int RuleId { get; set; } 

    public virtual Rule Rule { get; set; } 
} 
+0

Salut, merci pour la réponse.J'ai omis de discuter de ma conception pour se concentrer sur la question de savoir si ce problème peut être résolu avec EF.Pour les curieux, la structure de base de données sous-jacente est une table maître 'Rule' avec Je préfère classer ces 10+ tables de manière organisationnelle dans l'entité Rule plutôt que de les aplatir toutes.Par exemple, je voudrais que Rule.RuleParameters ait 4 propriétés de navigation et un autre type Rule.Filters pour contenir 5 propriétés de navigation IMO le wrapper fournit plus de contexte que de renommer chaque propriété RuleParameterCode ou RuleFilterDate. – Mantzel