2010-02-11 9 views
4

J'ai la classe suivante dans mon projetComment puis-je créer une relation parent/enfant avec le même objet avec AutoPersistenceModel


public class ProductCategory 
{ 
    public virtual Guid Id { get; set; } 
    public virtual string UrlSlug { get; set; } 
    public virtual string Title { get; set; } 
    public virtual bool IsActive { get; set; } 
    public virtual IList<Product> Products { get; set; } 
    public virtual ProductCategory Parent { get; set; } 
    public virtual IList<ProductCategory> Categories { get; set; } 
} 

ma table de base de données est la suivante:


CREATE TABLE [dbo].[ProductCategory](
    [Id] [uniqueidentifier] NOT NULL, 
    [UrlSlug] [nvarchar](255) NULL, 
    [Title] [nvarchar](255) NULL, 
    [IsActive] [bit] NULL, 
    [ProductCategory_id] [uniqueidentifier] NULL -- this is the parent category id 
) 

Je suis en train pour permettre à une catégorie d'être un enfant d'un autre, et évidemment, le parent pourrait avoir plusieurs catégories.

J'ai des problèmes pour faire fonctionner mon AutoPersistenceModel. C'est ce que j'ai pour ma cartographie. J'ai essayé quelques choses différentes qui n'ont tout simplement pas fonctionné pour moi. Il semble cartographier le HasMany correctement. Mais le HasOne finit par être lui-même, plutôt que l'entité parent correcte, ou rien (null), lorsque le ParentCategory_id est nul dans la base de données

Répondre

2

Anthony, essayez de changer l'un à ceci.

map.References(productCategory => productCategory.ParentCategory).WithColumns("ProductCategory_id").FetchType.Select(); 

L'a une est une à une relation que vous cherchez à faire référence à une autre classe en tant que parent.

1

Nous faisons quelque chose de similaire dans un de nos projets, c'est la convention que nous utilisons:

public class ProductCategoryReferencingConvention : IHasManyToManyConvention 
    { 
     public bool Accept(IManyToManyPart target) 
     { 
      return target.EntityType == typeof (ProductCategory); 
     } 

     public void Apply(IManyToManyPart target) 
     { 
      target.WithParentKeyColumn("ProductCategory_id"); 
     } 

    }