gpt4 book ai didi

c# - 使用 EntityFramework 时更新导航属性?

转载 作者:太空宇宙 更新时间:2023-11-03 15:19:30 25 4
gpt4 key购买 nike

当我通过 Entity Framework 保存模型时,如何设置导航属性?

我所有的模型都继承自模型基类,模型基类有一个名为 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;
}

最佳答案

实体有一个生命周期(新建/修改/删除)等。当您创建一个新实体时,您知道它不在数据库中并且它具有新状态。通常,当您查找某些数据时,您会在数据库中搜索实体标识符。如果实体断开连接,您必须手动更改实体状态,如果实体发生更改,如下所示:dbContext.Entry(ModelBase).State = EntityState.Modified

如果您有批量插入或批量删除,那么有很多方法可以帮助您避免性能问题。

  • 1) 使用 EntityFramework.BulkInsert
  • 2) 禁用changetracker

以及许多其他方式。

关于c# - 使用 EntityFramework 时更新导航属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37805658/

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