FluentNHibernate这个id没有保存

时间:2013-04-14 03:54:25

标签: c# fluent-nhibernate nhibernate-mapping has-many

我现在用FluentNHibernate开始学习,但发现很难。 这些是我的目标:

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 Minas Gerais

Num_ID Des_City Region_id

1 Belo-Horizo​​nte NULL

为什么没有填充REGION_ID ??

谢谢!

1 个答案:

答案 0 :(得分:1)

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

不确定我知道它是什么 - 但看起来像是City表中的区域外键,所以很可能你需要为RegionMap使用这样的东西:

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

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

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