2
我有以下情況。一個擁有照片列表集合和Photo對象的屬性對象可以引用一個或多個屬性對象。 所以我有這樣的映射,我認爲這是我的方案的精細流利Nhibernate拯救兒童實體
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();
}
數據流 用戶以某種形式進入數據和選擇最多五個鏡像每一個屬性創建數據。 該數據發送到接收PropertyViewModel newData和IEnumerable圖像的HttpPost控制器。如果modelstate沒問題,我打開會話和事務,並將此數據發送到域模型,並將此數據保存到數據庫。 一切正常,除了圖像沒有保存?沒有錯誤拋出,在調試模式下圖像通過regulary。
這裏是代碼創建控制器和內部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我一起接收圖像和其他數據,並嘗試將它們添加到收藏model.Photos並保存。
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;
好的,現在我的房產地圖有 HasMany(x => x.Photos).KeyColumn(「Id」)。Cascade.All(); 和PhotoMap有 引用(x => x.Property).Column(「PhotoId」); 現在保存我收到 無效的列名'PhotoId'。 – BobRock 2012-03-19 10:39:50
@ user313378:你的'Photo'表中沒有'PhotoId'列。您需要在'Photo'中指定引用父表'Property'的列。最有可能的是,這個列被稱爲'PropertyId'。 – 2012-03-19 10:42:39
不錯的工作人,謝謝你,愛stackoverflow。 – BobRock 2012-03-19 10:48:53