gpt4 book ai didi

c# - Fluent Nhibernate 保存子实体

转载 作者:行者123 更新时间:2023-11-30 21:08:14 24 4
gpt4 key购买 nike

我有以下情况。一个属性对象持有Photos List集合,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();
}

我的场景数据流是用户以某种形式输入数据,并为每个属性创建数据最多选择五个图像。该数据被发送到接收 PropertyViewModel newData 和 IEnumerable 图像的 HttpPost Controller 。如果 modelstate 没问题,我打开 session 和事务并将此数据发送到域模型,然后将此数据保存到数据库。一切正常,只是图像没有保存?没有错误抛出,在 Debug模式下图像会正常传递。

这是创建 Controller 和 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;

最佳答案

您需要添加 Cascade.All()给你的HasManyPropertyMap 中映射,而不是 ReferencesPhotoMap ,因为您正在保存 Property实例并且需要级联其集合以保存其子项。

关于c# - Fluent Nhibernate 保存子实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9768320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com