2011-12-28 118 views
0

将帖子添加到帖子存储库时,会发生以下消息:not null property references a null or transient value Category将实体添加到存储库时发生异常

[Test] 
public void PostInsertion() 
{ 
    var category = new Category 
    { 
     Title = "Programming", 
     Description = "Programming" 
    }; 
    var post = new Post 
    { 
     AuthorUrl = "some url", 
     Category = category, 
     Content = "some content", 
     Feedbacks = new HashedSet<Feedback>(), 
     Timestamp = DateTime.Now, 
     Title = "some title" 
    }; 

    var postRepository = new Repository<Post>(this.sessionFactory); 
    postRepository.Add(post); 
} 

这是什么意思?

编辑:邮政实体定义

[Serializable] 
public class Post : Entity<Post> 
{ 
    public Post() 
    { 
     this.Feedbacks = new HashedSet<Feedback>(); 
    } 

    public virtual String Title { get; set; } 
    public virtual String Content { get; set; } 
    public virtual DateTime Timestamp { get; set; } 
    public virtual Byte[] Thumbnail { get; set; } 
    public virtual Byte[] AuthorImg { get; set; } 
    public virtual String AuthorUrl { get; set; } 
    public virtual Category Category { get; set; } 
    public virtual ISet<Feedback> Feedbacks { get; set; } 

    public virtual void AddFeedback(Feedback feedback) 
    { 
     this.Feedbacks.Add(feedback); 
    } 
} 

谢谢!

+0

你可以发布Post的定义吗? – 2011-12-28 10:38:46

回答

3

由于NHibernate尝试添加对数据库中未保留的类别的引用,所以引发了该异常。在你的例子中,你正在创建一个新的类别,所以你有两个选择:

  1. 在保存帖子之前保存类别;
  2. 更改后映射并使其级联保存关联;

对于第二种选择,如果你正在使用XML映射,那么你就需要这样的东西:

<many-to-one name="Category" column="CategoryId" cascade="all"/> 

如果使用功能NHibernate,那么这将是:

References(x => x.Category, "CategoryId").Cascade.All(); 
+0

非常感谢!帮助! – lexeme 2011-12-28 10:46:19

相关问题