Фотографии объектов принадлежат к объекту недвижимости, и одно свойство может иметь много фотографий. Картирование в порядке, создание данных выполняется нормально. В db мои фотографии хранятся, например, Id 1 binarydata PropertyId (100) И статья собственности с идентификатором 100 имеет ссылку на многие фотографии. Я пишу все это, чтобы сказать, что мое создание данных в порядке и картирование.nhibernate sessions
Таким образом, проблема заключается в загрузке коллекции фотографий при показе сведений о недвижимости. Мне нужно загрузить сборку фотографий внутри сеанса, поэтому я застрял здесь.
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);
}
Как вы можете видеть в этом, я попытался использовать 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();
}
}
DB снимок Две таблицы, собственности и фотография.
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
Вы уверены, что ваше сопоставление в порядке? Поскольку этот первый Fetch должен уже заполнить вашу коллекцию фотографий. Я бы посмотрел на сгенерированный SQL и посмотрел, действительно ли NHibernate пытается загрузить связанные фотографии, и если в этих запросах есть ошибки. –
Я не могу понять, зачем вам нужны данные. Фото = GetMyPhotos (id); '. Затем вы получаете свои «данные свойства» с сеанса с загруженными фотографиями и фотографиями, данные. Фото уже загружены всеми фотографиями. – Nikolay
Можете ли вы включить свое картографирование. Ваше сопоставление неверно по сравнению с вашей схемой базы данных, и оно пытается обновить значение. – Phill