2
を保存します。写真リストコレクションを保持する1つのプロパティオブジェクトと、写真オブジェクトは、1つ以上のプロパティオブジェクトを参照することができます。 だから私は、私は私のシナリオの 流暢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();
}
細かいデータの流れだと思います。このようなマッピングは、 ユーザーが何らかの形でデータを入力されており、一つの特性ごとに5枚の画像まで選択してデータを作成します。データはHttpPost PropertyViewModelあるnewDataを受信し、コントローラ、およびIEnumerableをイメージに送信されること 。 modelstateが正常であれば、私はセッションとトランザクションを開き、このデータをドメインモデルに送信し、このデータをdbに保存します。画像が保存されていない以外 すべてが、大丈夫ですか?デバッグモードでは、エラーはスローされず、画像は定期的に渡されます。
は、ここでのコードは、コントローラを作成し、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);
}
}
内側とViewModelに内部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;
OK、今私のpropertyMapが hasManyのを持っている(X => x.Photos).KeyColumn( "ID")Cascade.All(); PhotoMapには があります。参照(x => x.Property).Column( "PhotoId"); は今の保存に私は 無効な列名「PHOTOID」を取得しています。 – BobRock
user313378 @:何列 'PhotoId'は、あなたの' Photo'テーブルではありません。親テーブル 'Property'を参照する' Photo'に列を指定する必要があります。おそらく、この列は「PropertyId」と呼ばれます。 –
素敵な仕事の男、ありがとう、愛stackoverflow。 – BobRock