我有3个名为Dish,Ingredient和DishIngredient的表。
菜
标识
名称
成分
标识
名称
DishIngredient
标识
DishId
IngredientId
量
菜肴配料连接配料和菜肴,并添加额外的细节,如数量。
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'中为identity列插入显式值。“
所以看起来nhibernate试图将一个值插入到Ingredient列的id列中,这是一个自动递增的主键....所以很明显它会失败。
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:0)
好吧......那是一个愚蠢的时刻......它并不理想,但我没有看到另一种方式。我有一个每个表的映射类,而Ingredient.Name现在是一个对象 - 所以我没有使用Ingredient.Name来获取值,而是使用了Ingredient.Name.Value。不理想,但似乎有效。