流畅的nhibernate中的复合类映射导致更新和主键出现问题

时间:2011-04-23 17:38:09

标签: fluent-nhibernate nhibernate-mapping

我有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列中,这是一个自动递增的主键....所以很明显它会失败。

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

好吧......那是一个愚蠢的时刻......它并不理想,但我没有看到另一种方式。我有一个每个表的映射类,而Ingredient.Name现在是一个对象 - 所以我没有使用Ingredient.Name来获取值,而是使用了Ingredient.Name.Value。不理想,但似乎有效。