2010-06-29 7 views
0

Ceci est mon premier article sur Stack Overflow! (yay!)Mappages de relations de 1 à N avec Castle ActiveRecord

J'ai des problèmes avec une cartographie Castle ActiveRecord, ce que je pensais être un scénario assez commun, mais peut-être que je n'ai pas "google" droit.

J'ai une entité appelée Produit et une autre entité appelée Garantie. Le produit a deux propriétés sur lui (entre autres), chacune de type garantie. Ainsi, le modèle ressemble à ceci (les attributs et les autres propriétés sont omis):

public class Product 
{ 
    ... 
    public Warranty StandardWarranty { get; set; } 
    public Warranty ExtendedWarranty { get; set; } 
} 

public class Warranty 
{ 
    ... 
    public Product Product { get; set; } 
} 

Au début, je pensais que je besoin de faire une classe de base, puis créer garantie de deux classes concrètes, StandardWarranty et ExtendedWarranty, mais le Les classes ne divergent dans aucun type de données ou de comportement, donc l'utilisation d'une seule table d'héritage avec une colonne discriminante semblait trop complexe et trop complexe. La chose la plus proche que je pourrais trouver dans la documentation ActiveRecord serait d'utiliser l'attribut "Any". Mais la documentation semblait suggérer qu'elle devrait être utilisée dans des scénarios où il y a un comportement polymorphique impliqué par des classes concrètes séparées. Mais je voulais vérifier avec la communauté avant de commencer à fermer ce trou de lapin.

Peut-être que je devrais juste utiliser une relation de un à plusieurs à la place? Un produit a de nombreuses garanties? Mais la classe de produits aura au plus 2 et au moins 0, donc cela ne semble toujours pas correct.

Toute entrée vous sera utile!

Merci, Matt

+0

me semble comme il est. –

Répondre

0

Je n'ai pas fait trop de cartographie avec le château AR, mais je l'ai fait ma part avec Rails. Ma conjecture est que vous devriez être en mesure de faire quelque chose comme ce qui suit:

public class Product 
{ 
    ... 
    [OneToOne] 
    public Warranty StandardWarranty { get; set; } 

    [OneToOne] 
    public Warranty ExtendedWarranty { get; set; } 
} 

public class Warranty 
{ 
    ... 
    [PrimaryKey(PrimaryKeyType.Foreign)] 
    public int ProductId { get; set; } 

    [OneToOne] 
    public Product Product { get; set; } 
} 
Questions connexes