powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate как получить значение автоинкремент поля после insert
5 сообщений из 5, страница 1 из 1
NHibernate как получить значение автоинкремент поля после insert
    #37339657
Balda_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Класс:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
public class Person
    {
        public virtual int ID { get; protected set; }
        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
        public virtual DateTime BirthDate { get; set; }
    }
Мапинг:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class PersonMap: ClassMap<Person>
    {
        public PersonMap()
        {
            Table("PersonalInfo");
            Id(x => x.ID).GeneratedBy.Identity();
            Map(x => x.FirstName).Column("FirstName");
            Map(x => x.LastName).Column("LastName");
            Map(x => x.BirthDate).Column("BirthDate");
        }
    }
Добавление записи:
Код: plaintext
1.
2.
3.
4.
5.
6.
public void Save(Person person)
{
    session = NHHelper.SessionFactory.OpenSession();
    session.Save(person);
    session.Flush();
}

При создании пользователем новой записи ID=0, в БД вставляется ID вычесленное автоинкрементом, но значение ID в экземпляре Person на клиенте не обновляется автоматически. В результате при попытке корректировать добавленную запись вылетает сообщение об ошибке: "Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)".
...
Рейтинг: 0 / 0
NHibernate как получить значение автоинкремент поля после insert
    #37339718
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Balda_1,

не верю. Или не то и не так мапите, или не то и не так сохраняете. Ваш же код отлично работает.

Код: plaintext
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.
    public class Person
    {
        public virtual int ID { get; protected set; }
        public virtual string FirstName { get; set; }
        public virtual string LastName { get; set; }
        public virtual DateTime BirthDate { get; set; }
    }


    public class PersonMap : ClassMap<Person>
    {
        public PersonMap()
        {
            Table("PersonalInfo");
            Id(x => x.ID).GeneratedBy.Identity();
            Map(x => x.FirstName).Column("FirstName");
            Map(x => x.LastName).Column("LastName");
            Map(x => x.BirthDate).Column("BirthDate");
        }
    }


    [TestFixture]
    public class PersonFixture : FixtureBase
    {
        [Test]
        public void Save()
        {
            var person1 = new Person();
            var person2 = new Person();

            using (var session = _sessionFactory.OpenSession())
            {
                session.Save(person1);
                session.Save(person2);
                session.Flush();
            }

            Assert.That(person1.ID, Is.EqualTo(1));
            Assert.That(person2.ID, Is.EqualTo(2));
        }
    }
...
Рейтинг: 0 / 0
NHibernate как получить значение автоинкремент поля после insert
    #37339744
Balda_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SolYUtor,

метод Save вызывается через WCF сервис:
Код: plaintext
1.
2.
3.
4.
5.
[OperationContract]
public void SavePerson(Person per)
{
    NHHelper.Save(per);
}
Может в этом проблема?
...
Рейтинг: 0 / 0
NHibernate как получить значение автоинкремент поля после insert
    #37339802
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Balda_1,
1. Версия NHibernate?
2. Какие объекты попадают в метод: созданные, изменённые или оба?
...
Рейтинг: 0 / 0
NHibernate как получить значение автоинкремент поля после insert
    #37339842
Balda_1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SolYUtor1. Версия NHibernate?

Последняя 3.1

SolYUtor2. Какие объекты попадают в метод: созданные, изменённые или оба?

Только созданные.

Изменение реализовано другим методом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
[OperationContract]
public void UpdatePerson(Person per)
{
    NHHelper.Update(per);
}
-------------
public void Update(Person per)
{
    session = NHHelper.SessionFactory.OpenSession();
    session.Update(person);
    session.Flush();
}
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate как получить значение автоинкремент поля после insert
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]