nhibernate сессий - PullRequest
       4

nhibernate сессий

0 голосов
/ 20 марта 2012

Фотографии объекта принадлежат объекту недвижимости, и одно свойство может иметь много фотографий.Картография в порядке, создание данных идет хорошо.В БД хранятся мои фотографии, например: Идентификатор 1: двоичные данные PropertyId (100) и статья Свойства с идентификатором 100 имеют ссылки на многие фотографии.Я пишу все это, чтобы сказать, что мое создание данных в порядке и отображение также.

Итак, проблема заключается в загрузке коллекции фотографий при отображении сведений о свойствах.Мне нужно загрузить коллекцию фотографий внутри сессии, поэтому я застрял здесь.

 public ActionResult Details(int id)
        {
            MyDomain.Property data = null;
            using (//session)
            {
                using (//transaction)
                {
                    data = session.QueryOver<MyDomain.Property>()
                        .Where(x => x.Id == id)
                        .Fetch(x => x.Photos).Eager //empty
                        .Fetch(x => x.Features).Eager
                        .SingleOrDefault<MyDomain.Property>();

                  //I was thinking here to call 
                  // data.Photos = GetMyPhotos(id);
                    tx.Commit();
                    return PartialView("_HomePageDetailsPartial", data);
                }

            }
            //return PartialView("_HomePageDetailsPartial", data);        
        }

Как вы можете видеть в этом, я попытался с данными .Photos = GetMyPhotos (id);но при отладке у меня появляется сообщение об ошибке Невозможно обновить столбец идентификаторов «Id».
Невозможно обновить столбец идентификаторов «Id».Я убежден, что даже в этой работе есть более элегантный способ получения коллекции фотографий для определенного свойства.

Мои сопоставления

public class PhotoMap : ClassMap<Photo>
    {
        public PhotoMap()
        {
            Table("Photo");
            Id(x => x.Id).GeneratedBy.Identity();
            Map(x => x.ImageData).CustomSqlType("VARBINARY(MAX)").Length(160000).Not.Nullable();
            Map(x => x.ImageMimeType).Not.Nullable();
            References(x => x.Property).Column("PropertyId");

        }
    }

public class PropertyMap : ClassMap<Property>
    {
        public PropertyMap()
        {
            Table("Property");
            Id(x => x.Id).GeneratedBy.Identity();
            ...
            References(x => x.Features, "FeaturesId");
            HasMany(x => x.Photos).KeyColumn("Id").Cascade.All();
        }
    }

Снимок БД Две таблицы, Свойство и Фото.

Id int not null
Title nvarchar(255) not null
PhotoId int not null

Таблица фотографий

Id int not null
ImageData varbinary(MAX) null
ImageMimeType varchar(50) null
PropertyId int not null

Отношения таковы:

FK_Property_Photo

Primary Key table        Foreign key table
--------------------------------------------
Photo                    Property
--------------------------------------------
Id                       PhotoId

1 Ответ

4 голосов
/ 20 марта 2012

ваш KeyColumn в вашем отображении неверен.KeyColumn используется для определения столбца внешнего ключа в n-таблице.В вашем случае ключевым столбцом должен быть «PropertyId».

Кроме того: почему у вас есть столбец PhotoId в таблице свойств, если отношение между свойством и фотографией равно 1: n?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...