nhibernate + беглый + отображение - PullRequest
0 голосов
/ 21 сентября 2010

У меня есть таблица http://img36.imageshack.us/i/beztytuuszxq.png/ и отображение:

public class CategoryMap : ClassMap<Category>
{
    public CategoryMap()
    {
        Table(FieldNames.Category.Table);
        Id(x => x.ID);
        Map(x => x.Name).Not.Nullable();
        Map(x => x.ShowInMenuBar).Not.Nullable();
        References(x => x.Parent).Column(FieldNames.Category.ID).Nullable();
        HasMany(x => x.Articles).Cascade.All().Inverse().Table(FieldNames.Article.Table);
    }
}

Сущность выглядит так:

public class Category : EntityBase
{
    public virtual int ID { set; get; }
    public virtual string Name { set; get; }
    public virtual Category Parent { set; get; }
    public virtual bool ShowInMenuBar { set; get; }
    public virtual IList<Article> Articles { set; get; }
}

Когда я хочу сохранить объект Category в db, когда для свойства Parent установлено значение null, у меня возникает исключение:

not-null property references a null or transient value CMS.Domain.Entities.Article.Category

Я не могу изменить

public virtual Category Parent { set; get; }

строка до

public virtual Category? Parent { set; get; }

или

public virtual Nullable<Category> Parent { set; get; }

из-за ошибки при компиляции:

CMS.Domain.Entities.Category' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'System.Nullable<T>'

Я не знаю, что изменить, чтобы иметь возможность сохранять объекты Категории без родителей.

Ответы [ 3 ]

1 голос
/ 21 сентября 2010

Нельзя сделать ссылочный тип Nullable (как он уже есть).Nullable<T> (или T?) может использоваться только с ненулевым типом значения (например, int или DateTime).

Ошибка относится к CMS.Domain.Entities.Article.Категория - свойство категории в классе Article.Вы не предоставили файл карты для сущности Article, однако я предполагаю, что он отображает свойство Category и либо указывает Not.Nullable(), либо не указывает Nullable().

Если модель домена допускает ArticleДля сущности, содержащей нулевую категорию, используйте Nullable(), в противном случае вам нужно установить категорию при создании / сохранении статьи:

Article.Category = aCategory;
1 голос
/ 21 сентября 2010

Причина, по которой вы не можете Nullable the Category, состоит в том, что Nullable предназначен только для типов значений, а Category, по определению, является ссылочным типом и, следовательно, уже может поддерживать значения NULL для свойств, определенных как Category. Можете ли вы предоставить полную трассировку стека исключения?

0 голосов
/ 21 сентября 2010

Я предполагаю, что вы пытаетесь сохранить статью (вы указали обратное), поэтому вам нужно это: Article.Category = категория;

...