【问题标题】:nhibernate +fluent +mapping休眠+流利+映射
【发布时间】:2010-09-21 02:06:59
【问题描述】:

我有一张桌子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&lt;T&gt;'

我不知道要更改什么才能在没有父母的情况下保存 Category 对象。

【问题讨论】:

    标签: nhibernate fluent-nhibernate nhibernate-mapping


    【解决方案1】:

    您不能将引用类型设为 Nullable(因为它已经是)。 Nullable&lt;T&gt;(或T?)只能用于不可为空的值类型(例如intDateTime)。

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

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

    Article.Category = aCategory;
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-15
          • 1970-01-01
          • 2011-10-24
          • 2017-03-10
          相关资源
          最近更新 更多