gpt4 book ai didi

nhibernate - 在与 nHibernate 的关系中保持图的一致性

转载 作者:行者123 更新时间:2023-12-04 03:22:32 24 4
gpt4 key购买 nike

如果我在 nHibernate 中使用双向关联,我是否需要将自己的代码添加到关系的双方以自动更新另一方?

例如,如果我在 BookCategory 之间存在多对一关系

public class Book{
public Category Category{ get; set; }
}

public class Category{
public IList Books{ get; set; }
}

我是否需要向 Book.Category 的 set() 添加代码,如下所示:

private Category _category;
public Category Category {
get { return _category; }
set {
Category priorCategory = _category;
Category newCategory = value;

if( newCategory != priorCategory ) {
if( priorCategory != null ) {
_category = null;
priorCategory.Books.Remove( this );
}

_category = newCategory;
if( newCategory != null ) {
newCategory.Books.Add( this );
}
}
}
}

向 Category.Books 添加类似这样的代码,以便调用者可以从 Category.Books 添加和删除书籍(例如,Category.Books.Add()Category.Books.Remove())?

(通过将 List 包装在 ObservableCollection 中来处理此问题,以便我可以响应添加/删除事件)

private IList _books { get; set; }
public ICollection<Book> Books
{
get{
if( _books == null ) _books = new ArrayList( );
var observableBooks = new ObservableCollection<Book>( _books.Cast<Book>( ) );
observableBooks.CollectionChanged += BookCollectionChanged;
return observableBooks;
}
}

private void OnBookAdded( Book addedBook ) {
_books.Add( addedBook );
addedBook.Category = this;
}

private void OnBookRemoved( Book removedBook ) {
_books.Remove( removedBook );
removedBook.Category = null;
}

// this just calls OnBookAdded() and OnBookRemoved() in response to change events
private void BookCollectionChanged( object sender, NotifyCollectionChangedEventArgs e ) {
if( NotifyCollectionChangedAction.Add == e.Action ) {
foreach( Book addedBook in e.NewItems ) {
OnBookAdded( addedBook );
}
}

if( NotifyCollectionChangedAction.Remove == e.Action ) {
foreach( Book removedBook in e.OldItems ) {
OnBookRemoved( removedBook );
}
}
}

或者 nHibernate 是否为你做了任何图形一致性,它会自动为你更新其中的一些?

最佳答案

没有必要更新双方,但总是有必要更新关系的“主”方向(即未映射为“反向”的方向)。因此,编写代码以保持两个方向同步是最佳实践,从长远来看,您会发现这会让您的生活更轻松。

关于nhibernate - 在与 nHibernate 的关系中保持图的一致性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2082601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com