在 NHibernate 中映射私有字段(使用 Fluent NH)

发布于 2024-09-11 07:46:11 字数 656 浏览 3 评论 0原文

我想知道,我如何映射(使用流畅的 nhibernate)这个模型:

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 映射它?

谢谢

干杯

I'd like to know, How Could I map (with fluent nhibernate) this model:

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);
   }
}

Today, I'm using a property of IList, but I don't want to expose the methods like "Add", "Remove", etc... on my property, So I think to expose a simple property of IEnumerable and encapsulate an IList like a private field!

So, Is it a good pratice ? How could I map it using NHibernate?

Thanks

Cheers

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

饮惑 2024-09-18 07:46:11

如果您遵循 NHibernate 可以使用的命名约定,并且您的示例代码也这样做,那么这非常简单:

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

我认为这不仅仅是一个好的实践,我认为这几乎总是正确的实践。

If you follow a naming convention that NHibernate can work with, and your sample code does, it's very easy:

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

I think this is more than a good practice, I think it's almost always the right practice.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文