Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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# 在实体框架中使用sqlserver的时间戳仅获取更改,而不是重新加载整个表/视图_C#_Sql Server_Winforms_Entity Framework_Sql Server 2008 R2 - Fatal编程技术网

C# 在实体框架中使用sqlserver的时间戳仅获取更改,而不是重新加载整个表/视图

C# 在实体框架中使用sqlserver的时间戳仅获取更改,而不是重新加载整个表/视图,c#,sql-server,winforms,entity-framework,sql-server-2008-r2,C#,Sql Server,Winforms,Entity Framework,Sql Server 2008 R2,我希望优化基于WinForms C的应用程序的版本,以降低连接速度。出于这个原因,我想在所有表中引入timestamp列,这些表在第一次需要时更改和加载大部分内容,然后只读取其他使用该应用程序的人可能完成的更新/插入/删除 为了让这个问题有一个例子,我在名为Konsultanci的表中添加了一个timestamp列。考虑到这个表可能很大,我想加载它一次,然后检查更新/插入。以一种简单的方式加载所有内容,我是这样做的: private void KonsultantsListFill(Ob

我希望优化基于WinForms C的应用程序的版本,以降低连接速度。出于这个原因,我想在所有表中引入timestamp列,这些表在第一次需要时更改和加载大部分内容,然后只读取其他使用该应用程序的人可能完成的更新/插入/删除

为了让这个问题有一个例子,我在名为Konsultanci的表中添加了一个timestamp列。考虑到这个表可能很大,我想加载它一次,然后检查更新/插入。以一种简单的方式加载所有内容,我是这样做的:

    private void KonsultantsListFill(ObjectListView listView)
    {
        using (var context = new EntityBazaCRM(Settings.sqlDataConnectionDetailsCRM)) {

            ObjectSet<Konsultanci> listaKonsultantow = context.Konsultancis;
            GlobalnaListaKonsultantow = listaKonsultantow.ToList(); // assign to global variable to be used all around the WinForms code.
        }
    }
如果桌子上有什么变化,我怎么检查?另外,如何在WinC窗体中处理更新?我是否应该检查每个选项卡页选择上的更改、打开新gui、保存、加载客户机、顾问等?我是否应该一直刷新所有表,就像启动一个后台线程,用户执行的每个操作都会执行该线程一样?或者应该只在最终需要数据之前执行

我在这里看到的是:

关于如何处理时间戳问题和刷新数据而不必多次加载所有内容的一般建议连接速度慢的问题

考虑时间戳列的实体框架的代码示例?最终在执行需要数据的东西之前使用的代码


时间戳不适合帮助您检测何时需要更新缓存。首先,它们不是日期时间,所以它们不会给你任何关于记录何时更新的线索。时间戳更倾向于协助乐观锁定和并发控制,而不是缓存管理。当尝试更新缓存时,您需要一种机制,比如表上的LastModified datetime字段,确保它已被索引!然后是一种定期检查自上次检查以来已修改的行的机制


关于保持数据的新鲜性,您可以在另一个线程上运行单独的查询,该线程可能会查找与上次检查时相比具有LastModified>的所有记录,然后向上插入更新或将它们插入缓存上下文。实体框架的另一个机制是使用

上下文。当我获取SQL数据时,刷新将不适用于我,因为我断开了与上下文的连接。所以这必须是你提到的那几行。谢谢你解释时间戳不适合我的需要。