2011-04-23 89 views
1

我有3個表,稱爲菜,成分和DishIngredient。流利的nhibernate複合類映射導致更新和主鍵問題


標識
名稱

成分
標識
名稱

DishIngredient
標識
DishId
原料成分
金額

菜成分鏈接成分和菜,並增加額外的細節,如數額。

public DishMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Title); 
     HasMany(x => x.Ingredients).Fetch.Join().Cascade.All(); 
    } 

    public IngredientMap() 
    { 
     Table("DishIngredient"); 
     Id(x => x.Id); 
     Map(x => x.Amount); 

     Join("Ingredient", m => 
     { 
      m.Map(x => x.Name); 
      m.KeyColumn("Id"); 
     }); 
    } 

這適用於獲取值從數據庫中,但是當涉及到試圖保存或更新我得到的消息:

「NHibernate.Exceptions.GenericADOException:無法插入: [SQL :INSERT INTO Ingredient(Name,Id)VALUES(?,?)] ----> System.Data.SqlClient.SqlException:當IDENTITY_INSERT設置爲OFF時,無法在表'Ingredient'中爲標識列插入顯式值。

所以它看起來像nhibernate正試圖插入一個值到成分列的id列,這是一個自動遞增的主鍵....所以顯然它失敗了。

任何人都可以幫我解決這個問題嗎?

回答

0

好吧....那是一個愚蠢的時刻....這並不理想,但我沒有看到另一種方式。我爲每個表都有一個映射類,而Ingredient.Name現在是一個對象 - 所以不是使用Ingredient.Name來獲取值,而是使用了Ingredient.Name.Value。不理想,但似乎工作。