[英]List.Add() not working in c# - getter and setter issue?
我有这个属性:
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();
一切都还好。 images数组被填满,并且保存到数据库的效果很好。
如果我将属性更改为此:
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;
}
}
现在执行我之前熟悉的确切操作,即field.Images仍然为空,但不会发生任何错误...并且当然不会发生数据库保存。
我究竟做错了什么?
编辑:
这行得通,谢谢...看来我的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();
}
}
为什么要在模型上执行这种操作? 您可以添加另一个标记为“ NotMapped”的列以执行相同的操作,请阅读以下代码:
[NotMapped]
public IEnumerable<FieldImage> NotDeletedImages
{
get
{
return this.Images.Where(x => !x.Deleted);
}
}
我想您应用此过滤器是因为您要“显示”不同的数据。 在这种情况下,为什么不使用视图模型?
您的获取者总是返回一个新列表 。 你打电话时
field.Images.Add(fieldImage);
您将获得一个新创建的列表并向其中添加一个项目,但是与源数据没有任何关系 。
一些选项:
Add
方法 _images
)设置为已过滤列表
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.