Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate merge необновляемых полей / 1 сообщений из 1, страница 1 из 1
05.11.2011, 11:18
    #37512480
Kurono-kun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NHibernate merge необновляемых полей
Здравствуйте.
Имеются две сущности InformationItem и FileModel. FileModel связана с InformationItem один ко многим.
Сущность InformationItem необходимо обновлять таким образом, чтобы свзанные с ней объекты каскадно обновлялись и при необходимости удалялись. Также в связанной сущности имеются поля, которые должны только добавляться и не должны обновляться.
Ниже маппинг этих сущностей.
Код: 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.
42.
43.
44.
45.
46.
47.
48.
        public InformationItemsMap()
        {
            this.Table("Information");

            this.Id(m => m.InformationId);

            this.Map(m => m.Name);
            
            this.HasMany(m => m.Files)
                .KeyColumn("InformationId")
                .Inverse()
                .Cascade.All();
        }

        public FilesMap()
        {
            this.Table("Files");

            this.Id(m => m.FileId);

            this.Map(m => m.FileName);
            this.Map(m => m.ContentType)
                .Not.Update();
            this.Map(m => m.ContentLength)
                .Not.Update();
            this.Map(m => m.Content)
                .Length(int.MaxValue)
                .LazyLoad()
                .Not.Update();

            this.Map(m => m.InformationId).ReadOnly();

            this.References(m => m.Information)
                .Column("InformationId")
                .Fetch.Join()
                .Cascade.None();
        }

        public override void Update(InformationItem item)
        {
            item.BuildStructure();

            var oldModel = this.Get(item.InformationId);

            foreach (var file in oldModel.Files.Where(f => !item.Files.Any(i => i.FileId == f.FileId)))
                session.Delete(file);

            session.Merge(item);
        }

Если делать Merge, выдается исключение "Объект не соответствует конечному типу.". Если убрать Not.Update() то Merge происходит нормально, без исключения.
Код: plaintext
1.
2.
3.
4.
5.
        public override void Update(InformationItem item)
        {
            item.BuildStructure();

            session.Update(item);
        }
Если делать просто Update, объект обновляется нормально, но тогда непонятно как удалить связанные объекты.

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


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