我有这个属性:
public virtual List<FieldImage> Images { get; set; }
如果我去获得具有此属性的类,请使用像我这样的实体...
Field field = this.unitOfWork.FieldRepository.GetByID(Convert.ToInt32(fieldID));
然后将图像添加到数组中:
FieldImage fieldImage = new FieldImage()
{
CreatedAt = dateNow,
UpdatedAt = dateNow,
CreatedBy = unitOfWork.UserRepository.GetByID(User.Identity.GetUserId()),
File = file,
Field = field
};
field.Images.Add(fieldImage);
然后保存上下文:
this.context.SaveChanges();
一切都好。图像数组被填满,保存到数据库的效果很好。
如果我将属性更改为:
private List<FieldImage> _images;
public virtual List<FieldImage> Images
{
get
{
return
this._images != null ?
this._images.Where(x => x.DeletedAt == null).ToList() :
new List<FieldImage>();
}
set
{
this._images = value;
}
}
现在做我以前的确切事情,字段。图像仍然是空的但没有错误...当然数据库保存不会发生。
我做错了什么?
修改
这很有效,谢谢......看起来我的if逻辑有问题:
private List<FieldImage> _images;
public virtual List<FieldImage> Images
{
get
{
if (this._images == null)
{
this._images = new List<FieldImage>();
}
return this._images;
}
set
{
this._images = value.Where( x => x.DeletedAt == null ).ToList();
}
}
答案 0 :(得分:3)
为什么要在模型上进行此类操作? 您可以添加另一个标记为“NotMapped”的列来执行相同的操作,请阅读以下代码:
[NotMapped]
public IEnumerable<FieldImage> NotDeletedImages
{
get
{
return this.Images.Where(x => !x.Deleted);
}
}
我认为你应用这个过滤器是因为你想“显示”不同的数据。在这种情况下,为什么不使用视图模型?
答案 1 :(得分:2)
你的getter 总是返回一个新列表。当你打电话
field.Images.Add(fieldImage);
您正在获取新创建的列表并向其添加项目,但没有与源数据的连接。
一些选项:
Add
方法,将该项目添加到原始列表_images
)设置为已过滤的列表