2011-04-23 67 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。不理想,但似乎工作。