代码之家  ›  专栏  ›  技术社区  ›  MichaelGG

NHibernate:根据父级将同一类映射到多个表

  •  2
  • MichaelGG  · 技术社区  · 17 年前

    我有一个模型,其中多个类都有一个值类型列表:

    class Foo { public List<ValType> Vals; }
    class Bar { public List<ValType> Vals; }
    

    2 回复  |  直到 17 年前
        1
  •  3
  •   Aleris    17 年前

    在数据库级别,解决方案是:

    Val(Id)
    Bar(Id)
    BarToVal(IdBar, IdVal)
    FooToVal(IdFoo, IdVal) 
    

    // BarMap:  
    HasManyToMany(x => x.Vals).WithTableName("BarToVal");
    
    // FooMap:  
    HasManyToMany(x => x.Vals).WithTableName("FooToVal");
    

        2
  •  2
  •   user29439 user29439    14 年前

    Google Code page for Fluent NHibernate .

    模型

    public class Customer
    {
        public string Name { get; set; }
        public string Address { get; set; }
    }
    

    模式

    table Customer (
        Id int primary key
        Name varchar(100)
    )
    
    table CustomerAddress (
        CustomerID int,
        Address varchar(100)
    )
    

    映射

    public class CustomerMap : ClassMap<Customer>
    {
        public CustomerMap()
        {
            Id(x => x.Id);
            Map(x => x.Name);
    
            WithTable("CustomerAddress", m =>
            {
                m.Map(x => x.Address);
            });
        }
    }
    

    在这个例子中,一个实体被拆分到数据库中的两个表中。这些表通过键上的一对一连接。使用WithTable功能,您可以告诉NHibernate将这两个表视为一个实体。

    推荐文章