【问题标题】:NHibernate: Best way to deal with intermediary table using Fluent NHibernate?NHibernate:使用 Fluent NHibernate 处理中间表的最佳方式?
【发布时间】:2010-09-23 19:50:48
【问题描述】:

您将如何在 Fluent NHibernate 中映射以下内容?

请参阅“18.3. 客户/订单/产品”

http://www.hibernate.org/hib_docs/nhibernate/html/example-mappings.html

【问题讨论】:

    标签: nhibernate fluent-nhibernate nhibernate-mapping fluent


    【解决方案1】:

    下面的解决方案使用与示例中的解决方案相同的方法,生成的 XML 也一样。为简洁起见,我省略了指定列名等内容。

    域:

    public class Customer
    {
        private ISet<Order> orders = new HashedSet<Order>();
    
        public long Id { get; set; }
        public string Name { get; set; }
        public ISet<Order> Orders
        {
            get { return orders; }
            private set { orders = value; }
        }
    }
    
    public class Order
    {
        public long Id { get; set; }
        public DateTime Date { get; set; }
        public Customer Customer { get; set; }
        public IList<LineItem> LineItems { get; private set; }
    }
    
    public class LineItem
    {
        public int Quantity { get; set; }
        public Product Product { get; set; }
    }
    
    public class Product
    {
        public long Id { get; set; }
        public string SerialNumber { get; set; }
    }
    

    映射:

    public class CustomerMap : ClassMap<Customer>
    {
        public CustomerMap()
        {
            Id(x => x.Id)
                .GeneratedBy.Native();
    
            Map(x => x.Name);
    
            HasMany<Order>(x => x.Orders)
                .IsInverse()
                .AsSet();
        }
    }
    
    public class OrderMap : ClassMap<Order>
    {
        public OrderMap()
        {
            Id(x => x.Id)
                .GeneratedBy.Native();
    
            Map(x => x.Date);
    
            References<Customer>(x => x.Customer);
            HasMany<LineItem>(x => x.LineItems)
                .Component(c =>
                    {
                        c.Map(x => x.Quantity);
                        c.References<Product>(x => x.Product);
                    }).AsList();
        }
    }
    
    public class ProductMap : ClassMap<Product>
    {
        public ProductMap()
        {
            Id(x => x.Id)
                .GeneratedBy.Native();
    
            Map(x => x.SerialNumber);
        }
    }
    

    要查看生成的 XML 映射,可以使用以下代码:

            Configuration config = new Configuration().Configure();
            PersistenceModel model = new PersistenceModel();
    
            model.addMappingsFromAssembly(typeof(CustomerMap).Assembly);
            model.Configure(config);
    
            model.WriteMappingsTo("your folder name here"); 
    

    希望对你有帮助。

    /埃里克

    【讨论】:

      猜你喜欢
      • 2013-12-15
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      相关资源
      最近更新 更多