Как я могу создать родительские / дочерние отношения с тем же объектом с AutoPersistenceModel - PullRequest
4 голосов
/ 11 февраля 2010

У меня есть следующий класс в моем проекте


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; }
}

моя таблица базы данных выглядит следующим образом:


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
)

Я пытаюсь разрешить категории быть дочерней по отношению к другой, и, очевидно, родитель может иметь несколько категорий.

У меня проблемы с настройкой AutoPersistenceModel. Это то, что у меня есть для моего картирования.


.ForTypesThatDeriveFrom(map =>
{
  map.HasMany(productCategory => productCategory.ProductCategories).WithForeignKeyConstraintName("ProductCategory_id");
  map.HasOne(productCategory => productCategory.ParentCategory).WithForeignKey("ProductCategory_id");
});

Я пробовал несколько разных вещей, которые просто не сработали для меня. Кажется, правильно сопоставить HasMany. Но HasOne оказывается самим собой, а не правильным родительским объектом, или ничем (нулевым), когда идентификатор ParentCategory_id в базе данных равен нулю

Ответы [ 2 ]

2 голосов
/ 11 февраля 2010

Энтони, попробуйте поменять его на это.

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

Имеет отношение один к одному, которое вы хотите сослаться на другой класс как родительский.

1 голос
/ 11 февраля 2010

Мы делаем нечто подобное в одном из наших проектов, это соглашение, которое мы используем:

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

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

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...