Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate как получить значение автоинкремент поля после insert / 5 сообщений из 5, страница 1 из 1
06.07.2011, 16:37
    #37339657
Balda_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NHibernate как получить значение автоинкремент поля после insert
Класс:
Код: 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
06.07.2011, 16:55
    #37339718
SolYUtor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NHibernate как получить значение автоинкремент поля после insert
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
06.07.2011, 17:02
    #37339744
Balda_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NHibernate как получить значение автоинкремент поля после insert
SolYUtor,

метод Save вызывается через WCF сервис:
Код: plaintext
1.
2.
3.
4.
5.
[OperationContract]
public void SavePerson(Person per)
{
    NHHelper.Save(per);
}
Может в этом проблема?
...
Рейтинг: 0 / 0
06.07.2011, 17:26
    #37339802
SolYUtor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NHibernate как получить значение автоинкремент поля после insert
Balda_1,
1. Версия NHibernate?
2. Какие объекты попадают в метод: созданные, изменённые или оба?
...
Рейтинг: 0 / 0
06.07.2011, 17:42
    #37339842
Balda_1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NHibernate как получить значение автоинкремент поля после insert
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
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate как получить значение автоинкремент поля после insert / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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