Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.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# 实体框架&x27;这是一种奇怪的急切的装载_C#_Entity Framework - Fatal编程技术网

C# 实体框架&x27;这是一种奇怪的急切的装载

C# 实体框架&x27;这是一种奇怪的急切的装载,c#,entity-framework,C#,Entity Framework,我使用实体框架6.1.3。我有一个实体,它引用了另一个实体: using System; using System.Collections.Generic; public partial class Users { public System.Guid UserID { get; set; } public System.Guid ExtID { get; set; } public Nullable<System.Guid> UserD

我使用实体框架6.1.3。我有一个实体,它引用了另一个实体:

using System;
using System.Collections.Generic;

public partial class Users
{
    public System.Guid UserID { get; set; }   
    public System.Guid ExtID { get; set; }       
    public Nullable<System.Guid> UserData_UserDataID { get; set; }   
    public virtual UserData UserData { get; set; }

}
如果用户选择取消操作,我将撤消对上下文的更改:

var changedEntries = dbContext.ChangeTracker.Entries().Where(x => x.State != EntityState.Unchanged).ToList();
foreach (var entry in changedEntries.Where(x => x.State == EntityState.Deleted))
      {
        entry.State = EntityState.Unchanged;
      }
然后使用上面的查询重新加载列表

奇怪的是,新列表与原始列表不同:已删除项的UserData字段为空。

我使用此代码检查:

UserList.Count(item => item.UserData == null)
在第一次运行时,其结果为0。删除后,结果与删除的项目数相等

你能告诉我为什么吗?我怎么能强迫他们重新装弹

你能告诉我为什么吗

这是因为将entitystate更改为Unchanged不会重新加载dbcontext。您需要手动重新加载上下文,如下所示:

var changedEntries = dbContext.ChangeTracker.Entries().Where(x => x.State != EntityState.Unchanged).ToList();
foreach (var entry in changedEntries.Where(x => x.State == EntityState.Deleted))
{
    //No need to set entry to Unchanged
    entry.Reload();
}

有趣。当我将states设置为Unchanged时,我希望从数据库中完全重新加载查询。它是从缓存中获取的吗?@Nestor是的,它是从缓存(更改跟踪程序API)中获取的。还有两个其他选项1)您可以重新初始化dbcontext指令2)您可以包括停止ef跟踪实体。我用探查器检查了它,它在第二次运行时也从数据库中获取数据(SQL查询相同)。所以问题出在上下文中的某个地方。或者,即使使用新查询,它也不会重新加载数据吗?尝试在ssms中运行相同的查询。ssms中的查询具有正确的值。只有上下文中的实体没有值。。。真奇怪。。。
UserList.Count(item => item.UserData == null)
var changedEntries = dbContext.ChangeTracker.Entries().Where(x => x.State != EntityState.Unchanged).ToList();
foreach (var entry in changedEntries.Where(x => x.State == EntityState.Deleted))
{
    //No need to set entry to Unchanged
    entry.Reload();
}