nhibernate +流利+映射

时间:2010-09-21 02:07:00

标签: nhibernate fluent-nhibernate nhibernate-mapping

我有一张表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>'

我不知道要改变什么来保存没有父母的Category对象。

3 个答案:

答案 0 :(得分:1)

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

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

如果域模型允许Article实体包含null Category使用Nullable(),否则您需要在创建/保存文章时设置类别:

Article.Category = aCategory;

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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