实体框架刷新上下文?

 雄鹰访谈录 发布于 2023-02-14 02:30

我怎样才能刷新我的背景?我有基于我的数据库中的视图的实体,当我对一个表具有视图导航属性的实体进行更新时,实体是更新但视图不刷新符合新的更新...只是想再次从Db数据.谢谢!

5 个回答
  • 刷新上下文中实体的最佳方法是处置上下文并创建一个新上下文.

    如果你真的需要刷新一些实体而你正在使用Code First方法和DbContext类,你可以使用

        public static void ReloadEntity<TEntity>(
            this DbContext context, 
            TEntity entity)
            where TEntity : class
        {
            context.Entry(entity).Reload();
        }
    

    要重新加载集合导航属性,您可以使用

        public static void ReloadNavigationProperty<TEntity, TElement>(
            this DbContext context, 
            TEntity entity, 
            Expression<Func<TEntity, ICollection<TElement>>> navigationProperty)
            where TEntity : class
            where TElement : class
        {
            context.Entry(entity).Collection<TElement>(navigationProperty).Query();
        }
    

    参考:https://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.dbentityentry.reload(v=vs.113).aspx# M: System.Data.Entity.Infrastructure.DbEntityEntry .Reload

    2023-02-14 03:00 回答
  • 如果您想使用DbContextApi重新加载特定实体,RX_DID_RX已经为您提供了答案.

    如果要重新加载/刷新加载的所有实体:

    如果您使用的是Entity Framework 4.1+(可能是EF5或EF 6),DbContext API:

    public void RefreshAll()
    {
         foreach (var entity in ctx.ChangeTracker.Entries())
         {
               entity.Reload();
         }
    }
    

    如果您使用的是entityFramework 4(ObjectContext API):

    public void RefreshAll()
    {
         // Get all objects in statemanager with entityKey
         // (context.Refresh will throw an exception otherwise)
         var refreshableObjects = (from entry in context.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted
                                                   | EntityState.Modified
                                                   | EntityState.Unchanged)
                                          where entry.EntityKey != null
                                          select entry.Entity);
    
         context.Refresh(RefreshMode.StoreWins, refreshableObjects);
    }
    

    无论如何最好的建议是,尝试使用"短暂的背景",你将避免这种问题.

    我写了几篇关于此事的文章:

    https://christianarg.wordpress.com/2013/06/13/entityframework-refreshall-loaded-entities-from-database/

    2023-02-14 03:01 回答
  • yourContext.Entry(yourEntity).Reload();
    

    2023-02-14 03:02 回答
  • 使用Refresh方法:

    context.Refresh(RefreshMode.StoreWins, yourEntity);
    

    或者替代地处理您当前的上下文并创建一个新的上下文.

    2023-02-14 03:11 回答
  • context.Reload()在MVC 4,EF 5中没有为我工作所以我这样做了.

    context.Entry(entity).State = EntityState.Detached;
    entity = context.Find(entity.ID);
    

    它的工作正常.

    2023-02-14 03:16 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有