У меня следующая ситуация.Один объект свойства, содержащий коллекцию списка фотографий и объект Photo, может ссылаться на один или несколько объектов свойства.Итак, у меня есть такое отображение, которое, я думаю, прекрасно
public PropertyMap()
{
Table("Property");
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Title).Length(255).Not.Nullable();
HasMany(x => x.Photos).KeyColumn("Id");
}
public PhotoMap()
{
Table("Photo");
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Version);
Map(x => x.ImageData).CustomSqlType("VARBINARY(MAX)").Length(160000);
Map(x => x.ImageMimeType);
References( x => x.Property )
.Column('PhotoId')
.Cascade.All();
}
Поток данных в моем сценарии: пользователь вводит данные в некоторой форме и выбирает до пяти изображений на одно свойство для создания данных.Эти данные отправляются в контроллер HttpPost, который получает PropertyViewModel newData и IEnumerable изображения.Затем, если состояние модели в порядке, я открываю сеанс и транзакцию и отправляю эти данные в модель предметной области, а затем сохраняю эти данные в БД. Все ок, кроме изображений не сохраняются?Ошибка не выдается, в режиме отладки изображения передаются регулярно.
Вот код создания контроллера и метод PropertyViewModel ToDomainModel ()
[HttpPost]
public ActionResult Create(PropertyViewModel newData, IEnumerable<HttpPostedFileBase> images)
{
if (ModelState.IsValid)
{
using (/// open session)
{
using (// using transaction)
{
MyDomain.Property model = new MyDomain.Property();
newData.ToDomainModel(model, images);
tx.Commit();
session.Save(model);
}
}
return RedirectToAction("Index");
}
else
{
return View(newData);
}
}
И в ToDomainModel внутри ViewModel я получаю изображениявместе с другими данными и попробуйте добавить их в модель. Коллекция фотографий и сохранить их.
public void ToDomainModel(Property x, IEnumerable<HttpPostedFileBase> Images)
{
x.Id = Id;
List<Photo> Photos = new List<Photo>();
foreach (var image in Images)
{
if (image != null && image.ContentLength > 0)
{
Photo p = new Photo();
p.Property = x;
p.ImageMimeType = image.ContentType;
p.ImageData = new byte[image.ContentLength];
image.InputStream.Read(p.ImageData, 0, image.ContentLength);
Photos.Add(p);
}
}
x.Photos = Photos;