2010-09-21 8 views
0

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

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

Когда я хочу, чтобы сохранить объект категории в дб, когда Родитель свойство установлен в нуль, у меня есть исключение:

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>'

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

ответ

1

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

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

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

Article.Category = aCategory; 
0

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

1

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

Смежные вопросы