4

我想知道,我怎麼能映射(用流利的NHibernate的),這個模型:映射NHibernate的私有字段(用流利NH)

public class Category 
{ 
    private IList<Product> _products; 
    public IEnumerable<Product> Products { 
     get { return _products; } 
    } 
    /* others properties */ 


    public Category() { 
     _products = new List<Product>(); 
    } 


    // to add a product i'd use something like this: 
    public void AddProducts(Product product) { 
     product.Category = this; 
     _products.Add(products); 
    } 
} 

今天,我使用的IList的屬性,但我不想公開諸如「添加」,「刪除」等方法在我的屬性上,所以我認爲要公開一個簡單的IEnumerable屬性並將IList封裝爲私有字段!

那麼,這是一個很好的實踐嗎?我如何使用NHibernate映射它?

感謝

乾杯

+0

有點偏題;但是,是的,這是很好的做法(不直接暴露收藏)。 – DanP 2010-07-20 18:37:31

回答

6

您示例代碼確實如此,這很容易:

HasMany(x => x.Products).KeyColumn("ProductId") 
    .AsBag().Inverse() 
    .Access.CamelCaseField(Prefix.Underscore); 
    // plus cascade options if desired 

我認爲這不僅僅是一種好的做法,我認爲這幾乎總是正確的做法。

+0

「我認爲這不僅僅是一種好的做法,我認爲這幾乎總是正確的做法。」非常好的報價恕我直言,確實可以保護您的域名對象免於濫用,並且在您決定屬於您的域名邏輯時予以封存。 – Dav 2012-09-11 09:37:14