2010-08-12 2 views
0

Я пытаюсь удалить объект (ForumTopic) и удалить это сообщение (ForumPost) внутри него. Вот мои объекты:NHibernate Simple Delete Driving Me Mad

public class ForumTopic 
{ 
    public virtual int TopicID { get; set; } 
    public virtual IList<ForumPost> Posts { get; private set; } 

    ... 

    public ForumTopic() 
    { 
     Posts = new List<ForumPost>(); 
    } 
} 

public class ForumPost 
{ 
    public virtual int PostID { get; set; } 
    public virtual ForumTopic Topic { get; set; } 

    ... 
} 

С помощью следующих отображений:

public ForumTopicMap() 
{ 
    Table("ForumTopics"); 
    Id(x => x.TopicID); 
    HasMany(x => x.Posts) 
     .Cascade.All(); 

    ... 
} 

public ForumPostMap() 
{ 
    Table("ForumPosts"); 
    Id(x => x.PostID); 
    References(x => x.Topic, "TopicID"); 

    ... 
} 

Однако, когда я удалить мою тему я получаю следующее сообщение об ошибке:

[ForumTopic.Posts # 14] [SQL: UPDATE ForumPosts SET TopicID = null WHERE ThemeID = @ p0]

Это кажется странным, как я думал, сказав, что Cascade.All() (I событие пробовал Cascade.Delete()) на моем отображении HasMany, он удалит все t он публикует эту тему. Я был бы признателен, если бы кто-нибудь мог показать мне, что я делаю неправильно. Thanks

ответ

0

Попробуйте добавить Inverse() на карту HasMany.

+0

Cheers, работал лечения. Похоже, мне все-таки нужно понять эту обратную вещь. – nfplee

+0

Это не так сложно. Каждая двунаправленная связь должна иметь «обратную» сторону, которая является стороной, не отвечающей за ее поддержание. –

+0

Привет, я медленно это понимаю. У меня также есть свойство Subscriptions на моей теме Subject, которая содержит список пользователей, подписавшихся на эту тему. У меня такая же проблема при удалении. Я не верю, что это двунаправлено, так как у меня нет свойства TopicSubscribed против моего пользователя, поэтому обратное мне не нужно требовать от моего понимания. Однако такая же проблема сохраняется при удалении тем. Я думал, что cascade.all позаботится об удалении подписки, но я снова догадался. – nfplee

Смежные вопросы