2013-04-14 21 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();