Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как сохранить с помошью Nhibernate сущность с первичным ключом(без автоинкремента) / 1 сообщений из 1, страница 1 из 1
16.04.2010, 17:37
    #36583001
alexxUK
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сохранить с помошью Nhibernate сущность с первичным ключом(без автоинкремента)
Всем привет, ищу решения свое проблемы но пока все безрезультатно.
Может кто-то уже сталкивался с подобным, нужен совет.

Проблема :

Есть класс Device с 2 полями : Id(int), UDID - int
Ему соответствует таблица в базе данных : Device: ID (PK), UDID - int

Так вот, у меня есть 2 базы - в одной, поле ID - PK = autoincrement (данные вставляются последовательно и MSSQL сам может за этим проследить), во второй - просто PK ... (данные ставляются выборочно - ID надо ассайнить руками)

Стоит проблема записать сущность в обе базы ...

что делаю.

1) Сам класс :
Код: plaintext
1.
2.
3.
4.
5.
public class Device 
    {
        public virtual int UDId { get; set; }
        public virtual int Id { get; protected set; }        
    }

2) Маппинг :
в случае автоинкремента :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class DeviceMap : ClassMap<Device>
    {
        public DeviceMap()
        {
            // works fine : 
            Id(x => x.Id);

            // schema is created but exception is thrown during the save part
            //Id(x => x.Id).GeneratedBy.Assigned();

            //schema generation fails
            //Map(x => x.Id).Generated.Insert();

            Map(x => x.UDId);
        }
    }

для обычного поля
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class DeviceMap : ClassMap<Device>
    {
        public DeviceMap()
        {
            // schema is created
            Id(x => x.Id).GeneratedBy.Native(); //Assigned();
            
            Map(x => x.UDId);
        }
    }

в итоге, код сохранения данных в базу выглядит так :
для автоинкремента (все хорошо - запись создается)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
using (var currentSession = session.OpenSession())
            {
                using (var transaction = currentSession.BeginTransaction())
                {
                    try
                    {
                        currentSession.SaveOrUpdate(entity);
                        transaction.Commit();
                    }
                    catch (Exception)
                    {
                        transaction.Rollback();
                        throw;
                    }
                }    
            }

для не-автоинкремента ... все плохо, не работает :( (обьект Entity в данном случае уже идет с не нулевым полем)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
using (var currentSession = session.OpenSession())
            {
                using (var transaction = currentSession.BeginTransaction())
                {
                    try
                    {
                        if (isNew)
                            {
                                currentSession.Save(entity);
                            }
                            else
                            {
                                currentSession.Update(entity);
                            }
                        transaction.Commit();
                    }
                    catch (Exception)
                    {
                        transaction.Rollback();
                        throw;
                    }
                }    
            }

вываливает ошибки :(
Код: plaintext
1.
2.
Cannot insert the value NULL into column 'Id', table 'test.dbo.Device'; column does not allow nulls. INSERT fails.
The statement has been terminated.

видимо, напортачил я где-то или в маппинге, или думаю, что надо обходить во втором случае эту неприятность через хранимые процедуры ... но поскольку у меня маппинг идет не через конфигурационный xml - то пока не совсем понятно, как здесь это заимплементить :)

Дамы и господа, помогите мне советом плиз :), как заставить сохраняться эту гадость во вторую базу
Спасибо заранее

будьте проще, будет легче :)
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Как сохранить с помошью Nhibernate сущность с первичным ключом(без автоинкремента) / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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