2011-12-28 83 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

相關問題