2010-05-21 6 views
0

HI,NHibernate fluide amène ClassMap Id et SubClassMap Id à la table référencée?

je les entités suivantes, je suis en train de la carte:

public class Product { 
    public int ProductId { get; private set; } 
    public string Name { get; set; } 
} 

public class SpecialProduct : Product { 
    public ICollection<Option> Options { get; private set; } 
} 

public class Option { 
    public int OptionId { get; private set; } 
} 

Et les applications suivantes:

public class ProductMap : ClassMap<Product> { 
    public ProductMap() { 
    Id(x => x.ProductId); 
    Map(x => x.Name); 
} 

public class SpecialProductMap : SubclassMap<SpecialProduct> { 
    public SpecialProductMap() { 
    Extends<ProductMap>(); 
    HasMany(p => p.Options).AsSet().Cascade.SaveUpdate(); 
    } 
} 

public class OptionMap : ClassMap<Option> { 
    public OptionMap() { 
    Id(x => x.OptionId); 
    } 
} 

Le problème est que mes tables finissent comme ceci:

Product 
-------- 
ProductId 
Name 

SpecialProduct 
-------------- 
ProductId 

Option 
------------ 
OptionId 
ProductId   // This is wrong 
SpecialProductId // This is wrong 

Il ne devrait y avoir une ProductId et unique r Il existe une référence à la table SpecialProduct, mais nous obtenons les identifiants "both" et deux références à SpecialProduct.ProductId.

Des idées?

Merci Andy

+0

Pouvez-vous montrer comment vous * voulez * que vos tables se retrouvent? – Jay

+0

Il existe deux colonnes 'ProductId' car la table' SpecialProduct' doit se reconnecter à 'Product', c'est une clé étrangère. Comme pour la table 'Option', cela semble vraiment faux. Vous avez peut-être rencontré un bug. J'ai ouvert un [ticket] (http://fluentnhibernate.lighthouseapp.com/projects/33236-fnh/tickets/184-hasmany-in-subclass-generates-wrong-foreign-keys) pour cela, et je vais enquêter plus tard. –

+0

Je ne parviens pas à reproduire votre problème avec les informations fournies. S'il vous plaît pourriez-vous commenter sur le billet que j'ai lié précédemment avec autant d'informations supplémentaires que vous pouvez fournir. Une solution dépouillée reproduisant le problème serait excellente. –

Répondre

1

Merci pour tout le monde commentaires.

Les tableaux que je voulais ressembler à ceci:

Product 
-------- 
ProductId 
Name 

SpecialProduct 
-------------- 
ProductId 

Option 
------------ 
OptionId 
SpecialProductId // Which ends up being just product id, but the FK here is to SpecialtyProduct 

J'avais oublié d'ajouter cette ligne à ma question initiale à la classe OptionMap:

public class OptionMap : ClassMap<Option> {  
    public OptionMap() {  
    Id(x => x.OptionId);  
    References(x => x.ParentOption); 
    }  
} 

Si je puis utiliser ce lieu, il fonctionne comme je veux:

public class OptionMap : ClassMap<Option> {  
    public OptionMap() {  
    Id(x => x.OptionId);  
    References(x => x.ParentOption).Column("SpecialProductId").Not.Nullable(); 
    }  
} 

Il semble que Fluent ajoutait "ProductId" en raison des références a nd n'a pas compris que la colonne appropriée était déjà là.

Questions connexes