2010-09-21 55 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; } 
} 

当我要救一个类别对象数据库,当parent属性设置为空,我有例外:

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

我不知道如何改变以便有可能在没有父母的情况下保存Category对象。

回答

1

你不能使一个引用类型为空(因为它已经是)。 Nullable<T>(或T?)只能与非空值类型(例如intDateTime)一起使用。

错误指的是CMS.Domain.Entities.Article.Category - Article类中的Category属性。您尚未提供Article实体的映射文件,但我认为它映射了Category属性,并指定Not.Nullable()或不具体Nullable()

如果域模型允许条实体包含空类别使用Nullable()否则你需要设置的类别创建/保存文章的时候:

Article.Category = aCategory; 
0

我猜你试图保存一篇文章,(你指定为inverse),因此你需要这个: Article.Category = category;

1

你不能为空类别的原因是因为Nullable仅用于值类型,根据定义,Category是引用类型,因此已经可以在定义为Category的属性上支持空值。你能否提供异常的完整堆栈跟踪?