Составное отображение классов в беглом nhibernate, вызывающее проблемы с обновлением и первичным ключом - PullRequest
1 голос
/ 23 апреля 2011

У меня есть 3 таблицы, которые называются Dish, Ingredient и DishIngredient.

Блюдо
Идентификатор
Имя

Ингредиент
Идентификатор
Имя

DishIngredient
Id
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 INTOIngredient (Name, Id) VALUES (?,?)] ----> System.Data.SqlClient.SqlException: невозможно вставить явное значение для столбца идентификаторов в таблице «Ingredient», когда для IDENTITY_INSERT установлено значение OFF. "

Похоже, что nhibernate пытается вставить значение в столбец id столбца Ingredient, который представляет собой первичный ключ с автоинкрементным увеличением ... так что, очевидно, он не работает.

Может кто-нибудь мне помочьс этим?

1 Ответ

0 голосов
/ 24 апреля 2011

Хорошо ... это был момент глупости ... это не идеально, но я не вижу другого пути.У меня есть класс отображения для каждой таблицы, и Ingredient.Name теперь является объектом - поэтому вместо использования Ingredient.Name для получения значения я использовал Ingredient.Name.Value.Не идеально, но, кажется, работает.

...