当我按实体框架保存模型时,如何设置导航属性?
我的所有模型都继承自modelbase类,而modelbase类有一个名为ModelState的枚举。
public class ModelBase : IModel.IModel
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Display(Name = "唯一标识符")]
public virtual Guid Id { get; set; }
[NotMapped]
[Display(Name = "模型状态")]
public virtual ModelState ModelState { get; set; } = ModelState.UnChanged;
[NotMapped]
[Display(Name = "是否新创建对象")]
public virtual bool IsNew => ModelState == ModelState.Added || ModelState == ModelState.AddedFromDb;
}
然后我发现当我通过DbContext.SaveChanges()保存模型时。不仅我传入的模型,而且模型的导航属性将同时保存。
那么,当我保存某些模型时,如何更新导航属性?
我目前这样保存:
public virtual int AddOrUpdate(IEnumerable<T> models)
{
var modelList = models.ToList();
CheckModel(modelList);
foreach (var model in modelList.Where(model => model.IsNew))
{
DbContext.Set<T>().Add(model);
}
var result = DbContext.SaveChanges();
foreach (var model in modelList.Where(model => model.IsNew))
{
model.ModelState = ModelState.UnChanged;
}
return result;
}
答案 0 :(得分:0)
实体具有实时循环(新建/修改/删除)等。当您创建新实体时,您知道它不在数据库中且状态为新。通常,当您查找某些数据时,您会在数据库中搜索实体标识符。如果断开连接的实体,您必须手动更改实体状态,如果实体已更改,请执行以下操作: dbContext.Entry(ModelBase).State = EntityState.Modified 。
如果您有批量插入或批量删除,那么有很多方法可以帮助您避免性能问题。
以及许多其他方式。