Исключение происходит при добавлении сущности в хранилище - PullRequest
0 голосов
/ 28 декабря 2011

При добавлении сообщения в репозиторий сообщений возникает следующее исключение: 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);
    }
}

Спасибо!

1 Ответ

3 голосов
/ 28 декабря 2011

Это исключение было вызвано тем, что NHibernate попытался добавить ссылку на категорию, которая не была сохранена в базе данных.В вашем примере вы создаете новую категорию, поэтому у вас есть две опции:

  1. Сохранить категорию перед сохранением сообщения;
  2. Измените отображение сообщения и сделайте его каскадным, сохраните ассоциации;

Для второго варианта, если вы используете сопоставление Xml, вам понадобится что-то вроде:

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

Если вы используете Fluent NHibernate, то он будетбыть:

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