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