2010-12-17 114 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