Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用EntityFramework时是否更新导航属性?_C#_Entity Framework - Fatal编程技术网

C# 使用EntityFramework时是否更新导航属性?

C# 使用EntityFramework时是否更新导航属性?,c#,entity-framework,C#,Entity Framework,按实体框架保存模型时,如何设置导航属性 我的所有模型都继承自modelbase类,modelbase类有一个名为ModelState的枚举属性 public class ModelBase : IModel.IModel { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] [Display(Name = "唯一标识符")] public virtual Guid Id { get; set;

按实体框架保存模型时,如何设置导航属性

我的所有模型都继承自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;
    }
public virtual int AddOrUpdate(IEnumerable模型)
{
var modelList=models.ToList();
检查模型(模型列表);
foreach(modelList.Where(model=>model.IsNew)中的var模型)
{
DbContext.Set().Add(模型);
}
var result=DbContext.SaveChanges();
foreach(modelList.Where(model=>model.IsNew)中的var模型)
{
model.ModelState=ModelState.UnChanged;
}
返回结果;
}

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

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

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

还有许多其他方法。

NotMapped表示您不需要将它们存储在数据库中?为什么在实体POCO对象中有它?!!如果您正在处理断开连接的实体,则实体状态中有其信息。我使用ModelState跟踪数据库中是否存在该模型。如果我使用IsExist方法,将执行一个花费大量时间的sql查询。我做得对吗?实体有一个新的/更改的/删除的生命周期等。当您创建一个新实体时,您知道它不在数据库中。通常,在查找某些数据时,会在数据库中搜索标识符。您可以这样做:dbContext.Entry(ModelBase.State=EntityState.Unchanged;谢谢,我试过了。但我需要在一分钟内存储10000多条记录。检查每个模型的状态需要花费太多的时间……如果您有很多项,并且希望插入它们,那么请使用EntityFramework.BulkInsert