C# 导航属性工作不正常

C# 导航属性工作不正常,c#,entity-framework,C#,Entity Framework,我在使用最新版本的实体框架时遇到了一个奇怪的问题,关于导航属性 我有一个实体,其中我有一些必需的导航属性,这些属性被标记为虚拟。 请参见下面的“我的实体”类: public class Folder : UserReferencedEntityBase<int> { #region Constructors public Folder() { } public Folder(IUnitOfWork unitOfWork) : bas

我在使用最新版本的实体框架时遇到了一个奇怪的问题,关于导航属性

我有一个实体,其中我有一些必需的导航属性,这些属性被标记为虚拟。 请参见下面的“我的实体”类:

public class Folder : UserReferencedEntityBase<int>
{
    #region Constructors

    public Folder()
    { }

    public Folder(IUnitOfWork unitOfWork)
        : base(unitOfWork)
    {
        ParentFolder = unitOfWork.Context.GetCurrentFolder as Folder;
    }

    #endregion

    #region Properties

    [Required]
    public string Name { get; set; }

    [Required]
    public string Data { get; set; }

    [Column(Order = 998)]
    public Folder ParentFolder { get; set; }

    [Required]
    public bool IsPublished { get; set; }

    #endregion
}
现在,我有了我的MVC网站,我正在加载一个实体,更新一个属性并再次将其保存在数据库中:

var model = new FolderManager(UnitOfWork).GetFolder(id);
model.IsPublished = true;
UnitOfWork.Commit();
我在这里使用一个定制的工作单元,但根本没有火箭发射。所有事情都发生在同一个上下文中,在同一个请求中,没有异步调用

当我执行代码时,我收到:

一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性

查看此项,会发现以下错误:

“CreatedBy字段是必需的。”

现在,奇怪的是,当我调试我的代码时,上面给出的3行,填充了created_by属性,代码执行时没有任何问题

我使用的是ASP.NET identity Framework,因此在重要的情况下使用IdentityDbContext

有人有线索吗

问候

更新-文件夹管理器

经理只是从我的工作单元中取出我的内容的包装器:

public Folder GetFolder(int id)
{
    return UnitOfWork.FolderRepository.GetByFilter(x => x.Id == id);
}
GetByFilter方法的构造如下:

 public virtual TEntity GetByFilter(Func<TEntity, bool> filter)
 {
     DbSet.ThrowIfNull("DbSet");

     if (OnBeforeEntityGet != null)
     { OnBeforeEntityGet(this, new RepositoryEventArgs(typeof(TEntity))); }

     if (OnEntityGet != null)
     { OnEntityGet(this, new RepositoryEventArgs(typeof(TEntity))); }

     return !Entities.Any() ? null : !Entities.Where(filter).Any() ? null : Entities.First(filter);
 }
public-virtualtenty-GetByFilter(Func-filter)
{
DbSet.ThrowIfNull(“DbSet”);
if(OnBeforeEntityGet!=null)
{OnBeforeEntityGet(这是新的RepositoryEventArgs(typeof(tenty));}
if(OnEntityGet!=null)
{OnEntityGet(这个,新的RepositoryEventArgs(typeof(tenty));}
return!Entities.Any()?null:!Entities.Where(filter).Any()?null:Entities.First(filter);
}

只是想让你知道我找到了解决方案。 似乎当您加载一个包含虚拟属性但从不检查它们的实体时,它们保持为空,因此代码无法工作

如果附加了调试器,则在检查完此元素后,调试器将不稳定地工作

这是正常的行为吗


您好,

什么是
FolderManager
,它是如何获得您的
文件夹
实例的?请查看我的更新问题。
 public virtual TEntity GetByFilter(Func<TEntity, bool> filter)
 {
     DbSet.ThrowIfNull("DbSet");

     if (OnBeforeEntityGet != null)
     { OnBeforeEntityGet(this, new RepositoryEventArgs(typeof(TEntity))); }

     if (OnEntityGet != null)
     { OnEntityGet(this, new RepositoryEventArgs(typeof(TEntity))); }

     return !Entities.Any() ? null : !Entities.Where(filter).Any() ? null : Entities.First(filter);
 }