2010-12-17 117 views
1

我有两个类。一个是订单:FluentNHibernate单向一对多映射

public class Order 
{ 
    public virtual int Id { get; set; } 
    public virtual IList<Product> Products { get; set; } 
} 

另一种是产品:

public class Product 
{ 
    public virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
} 

他们流利的映射是这样的:

public class OrderMap : ClassMap<Order> 
{ 
    public OrderMap() 
    { 
     Table("Orders"); 
     Id(x => x.Id, "Id"); 
     HasMany(x => x.Products) 
      .KeyColumn("OrderId") 
      .Cascade.All(); 
    } 
} 

public class ProductMap : ClassMap<Product> 
{ 
    public ProductMap() 
    { 
     Table("Products"); 
     Id(x => x.Id, "Id"); 
     Map(x => x.Name); 
    } 
} 

数据库没有对一个非空约束Products表的OrderId列。 问题是:订单和产品都持续存在,但是产品在OrderId列上保持为空值。

我错过了什么吗?

回答

0

好吧,看起来很奇怪,我们通过重新工作会话管理,使用它在using语句中创建ITransaction来解决此问题。奇怪,但解决了。感谢大家!

-1

尝试使用:

HasMany(x => x.Products) 
     .KeyColumn("OrderId") 
     .Inverse() 
     .Cascade.All(); 

哪个(逆())指出的OrderId是Products表,而不是

+0

它没有工作... – viniciushana 2010-12-17 13:32:00

0

的hasMany的只是使用参考

Reference(x => x.Products).Cascade.All(); 

上的hasMany反是NHibernate术语,这意味着关系的另一端负责保存。

+0

但它不是一个参考情况,因为当映射双向一对多映射时,引用映射实体的另一侧。 – viniciushana 2010-12-20 17:17:56