Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
barabasishe
0 / 0 / 0
Регистрация: 15.11.2013
Сообщений: 13
1

Вставка новой записи в таблицу с составным ключом Fluent NHibernate

24.04.2014, 10:11. Просмотров 415. Ответов 0
Метки нет (Все метки)

День добрый всем.

Имею сущность Person
Имею сущность Program
У каждого Person может быть несколько Program и у каждой Program может быть несколько Person
Есть сущность PersonProgram

C помощью Fluent NHibernate создаю классы так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
// Person
    public class Person : Entity
    {        
        public virtual Int32 Id { get; set; }
        public virtual IList<PersonProgram> Programs { get; set; }
        ...
    }
    public class PersonMap : ClassMap<Person>
    {        
        Table("Person");
        Id(p => p.Id).Column("Id");
        HasMany(p => p.Programs).KeyColumn("personID").Inverse();
        ...
    }
 
// Program
    public class Program : Entity
    {        
        public virtual Int32 Id { get; set; }
        ...
    }
    public class ProgramMap : ClassMap<Program>
    {        
        Table("Program");
        Id(p => p.Id).Column("Id");
        ...
    }
// PersonProgram
    public class PersonProgram : Entity
    {        
        public virtual Person person { get; set; }
        public virtual Program Program { get; set; }
        ...
    }
    public class PersonProgramMap : ClassMap<PersonProgram >
    {        
        Table("PersonProgram");
        CompositeId()
                .KeyReference(p => p.Person, "personID")
                .KeyReference(p => p.Program, "programID");
        ...
    }
Данные получаю, все отлично с этим.
При создании новой экземпляра PersonProgram и сохранении в базу вылезает ошибка.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
    var newPersonProgram = new PersonProgram();
    
    newPersonProgram.Person = existedPerson;
    newPersonProgram.Program = existedProgram;
    ...
    using (ITransaction transaction = _session.BeginTransaction())
    {        
        _session.SaveOrUpdate(newPersonProgram); // -- ошибка, что countRow = 2, ожидается 1
        //_session.Save(newPersonProgram); -- ошибка, что countRow = 2, ожидается 1
        //_session.Merge(newPersonProgram); -- ошибка, что поле personID не может быть заполнено значением NULL
 
       transaction.Commit();
    }
На Commit выскакивают исключения те, что привел в комментариях к каждой функции сохранения.
Что я неправильно делаю?

Я так понимаю, что NHibernate пытается сгенерировать id, хотя он уже есть в соответствующих записях, осталось их только вставить. Как быть?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2014, 10:11
Ответы с готовыми решениями:

Добавление новой записи в таблицу
Привет всем! При добавлении новой записи в таблицу вознокает ошибка не...

Вставка записи в таблицу
Привет, может кто подсказать что в этом коде не так, чего ошибка? ...

Как определить ID вновь добавленной записи (NHibernate)?
Добрый день! Необходимо определить Id вновь добавленной записи при...

Как программно добавить запись в таблицу с автоинкрементным первичным ключом
Собственно вопрос в заголовке, подробности такие: использую C# VS2008 SQL...

Вставка новой строки. Связь с DataTable()
Друзья, разъясните пожалуйста зачем создавать ДатаТабел? Чтобы вставить новую...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2014, 10:11

Вставка новой строки в таблицу
Запрос:mysql_query(&quot;INSERT INTO girls (name,link) VALUES ($name,$link)&quot;,$conn)...

GridView + DetailsView c 2я каскадными DropDownList (вставка новой записи)
Имеется GridView, с ним связан через параметр DetailsView, в который имеются 2...

Возможна ли вставка новой записи в середину таблицы, а не добавление в конец?
Существует таблица - поле Счетчик и Текстовое поле (которое имеет хаотичные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru