2013-04-14 22 views
1

我现在开始使用FluentNHibernate进行学习,但发现很困难。 这是我的目标:FluentNHibernate此ID不保存

public class Region 
{ 
    public virtual Int64 Id { get; set; } 
    public virtual string Name { get; set; } 
    public virtual IList<City> ListCity { get; set; } 
    public Region() 
    { 
    ListCity = new List<City>(); 
    } 
} 
public class City 
{ 
public virtual Int64 Id { get; set; } 
public virtual string Name { get; set; }   
} 

这里是映射:

public class RegionMap : ClassMap<Region> 
{ 
     public RegionMap() 
     { 
      Table("tbRegion"); 
      Id(x => x.Id) 
       .Column("Num_ID"); 
      Map(x => x.Name) 
       .Column("Des_Name") 
       .Not.Nullable(); 
      HasMany<City>(x => x.ListCity) 
       .Inverse() 
       .Cascade.SaveUpdate() 
       .AsBag(); 

     } 
    } 

public class CityMap : ClassMap<City> 
    { 
     public CityMap() 
     { 
      Table("tbCity"); 
      Id(x => x.Id) 
       .Column("Num_ID"); 
      Map(x => x.Name) 
       .Column("Des_City") 
       .Not.Nullable(); 
     } 
    } 

到目前为止,我认为这是正常的。 我曾经拥有Hibernate来生成数据库 一个简单的代码来测试映射:

List<City> lcity = new List<City>(); 
lcity.Add(new City() 
{ 
    Name = "Belo-Horizonte" 
}); 
Region region = new Region() 
{ 
    ListCity = lcity, 
    Name = "Minas Gerais" 
}; 
Repository.Connect(s => s.Save(region)); 

看我的结果

Num_ID Des_Name

1个米纳斯吉拉斯

Num_ID Des_City一个Region_id

1 Belo-Horizo​​nte NULL

为什么没有填写REGION_ID?

谢谢!

回答

1

你必须教它如何处理REGION_ID - 你的映射没有提到它。

不知道我的想法是什么,要么 - 但看起来像它在城市表中的区域外键,所以最有可能你需要使用像这样的RegionMap

 HasMany<City>(x => x.ListCity) 

      // Provide column key to reference by 
      .KeyColumnNames.Add("REGION_ID") 

      .Inverse() 
      .Cascade.SaveUpdate() 
      .AsBag();