C# 从不同线程同时访问数据

C# 从不同线程同时访问数据,c#,sql-server,multithreading,winforms,entity-framework,C#,Sql Server,Multithreading,Winforms,Entity Framework,您好,我正在开发一个WinForms应用程序,它使用LocalDb和EF进行数据访问。 到目前为止,我的WinForms应用程序中的db访问一次只执行一次,只需调用: using (var context = new EfDbContext()) { // do something on context entities } 需要的时候 现在,我面临一个新的要求-我需要创建一个额外的后台服务,用于定期从某些FTP服务器上的文件获取数据,然后-更新/插入此SQL LocalDb中的新数

您好,我正在开发一个WinForms应用程序,它使用LocalDb和EF进行数据访问。 到目前为止,我的WinForms应用程序中的db访问一次只执行一次,只需调用:

using (var context = new EfDbContext())
{
     // do something on context entities
}
需要的时候

现在,我面临一个新的要求-我需要创建一个额外的后台服务,用于定期从某些FTP服务器上的文件获取数据,然后-更新/插入此SQL LocalDb中的新数据

我想要实现的是,为WinForms应用程序和这个新的后台应用程序服务同时授予对SQL LocalDb数据的访问权限,这样用户就可以在WinForm应用程序中查看Db中的数据,而服务在后台执行数据更新

我想为彼此分配资源阻塞

这能做到吗?如何做到? 谢谢


更新:我忘了提到从ftp文件读取然后插入数据库的数据集可能相当大,大约有20-50k条记录,每条记录由十进制字段、DateTimeOffset字段和几个Int32字段组成。

只需使用它,现在不必担心并发性。SQL Server广泛应用于高度并发的应用程序,如ASP.NET Web应用程序,您的示例并不特别。在使用具有写操作的事务时,阻塞可能是一个问题。但是有很多方法可以解决这个问题,我想现在与你的任务无关。

有没有尝试过?例如,刚刚尝试过的SQL Server是否已经工作了?SQL Server本质上是一个多用户RDBMS。这包括LocalDB。事实上,您很难找到比SQL Server更好地处理并发性的东西。@FelixD。我还没有尝试任何东西,我正在阅读有关它的文章,只是想知道它是否可以实现,或者我需要切换到SqlServer并为此付费。不。所有版本的SQL Server都可以在并发性下正常工作。LocalDB使用的引擎与SQL Server Enterprise使用的引擎完全相同,只是对它可以利用的系统资源有限制。您可能会与诸如SQLite之类的占用空间小的数据库系统混淆。默认情况下,LocalDB的配置方式使从远程计算机访问变得困难,但这是一个完全不同的问题。您可能希望Express仍然是免费的,仍然是并发的。您可以,但不要求您这样做。快照隔离在不锁定的情况下实现并发,但它不会消除冲突——它只是将冲突转化为必须重试的失败。作为第一种方法,默认的读取提交隔离级别对于大多数应用程序都很好。