在中央数据库中的多用户环境中的实体框架数据更新(Entity Framework data upda

2019-06-26 12:09发布

让我来解释一下标题。

我在一个应用程序(TestApp)使用实体框架代码优先。 为了调试目的TestApp连接到数据库的SQLExpress(中央数据库服务器)。

为了简单起见这里,该数据库包含一个表的“产品”和TestApp显示在数据网格数据库中的所有“产品”和TestApp可以添加/删除“产品”或修改的产品名称。

public class Product {
 public int ProductId { get; set; }
 public string ProductName { get; set; }
}

public DbSet<Product> Products { get; set; }

我有3例PC的地方TestApp安装并运行(我会打电话给他们Client_X)。 如果我通过Client_1上添加一个新的“产品”,比这是不是在TestApp上的Client_2和Client_3直接可见。 只有当Client_2与和Client_3再次获取所有数据(手动刷新),比我看到新添加的记录。

我想知道的:我怎样才能知道通过EF代码第一次在数据库中的变化呢? Client_2与和Client_3将如何得到他们的数据网格自动更新,因为一个新的项目添加或移除?

我不知道这是否是问太多,但一个简单的示例项目或简单的代码来证明这将是有益的。

FYI:我是相当新的EF代码优先。 (我使用.NET 4.0和EF代码第一次4.3.1)

提前致谢。

方案:

Client_3<
         \
          \
           \
            \
             \>
Client_1 <---> [Central Database] <----> Client_2

更新/编辑:

好吧,很显然的是,实体框架本身并不做多客户端之间的任何同步。

所以我会问另一个问题:我想工作的客户机-服务器方式:

  • 单台服务器的应用程序,创建数据库,并第一次使用实体框架代码。
  • 多个客户端与单个服务器应用程序进行通信。

    现在会是什么,以确保客户端使用相同的数据,看看eachothers更新/改变的最佳途径? (我希望代码示例。)

Answer 1:

没有什么可以用使用实体框架来通知客户。 你可以写一个过载SaveChanges ,或创建扩展方法,但只要你没有客户端- >服务器架构我不能想象你如何能做到这一点。

如果你使用WCF作为您访问数据库,您可以创建您的客户端和服务器作为新的记录之间的双向通信是将使用回调通道通知可用的客户。

另一种方法是使用MS SQL Service Broker的概述(Service Broker的)

尽管事实上,有许多不同的方式来获得期望的结果,他们都不是因为它是ORM,也不是用.NET构建的应用程序一个应用程序框架或通信框架与实体框架。



Answer 2:

这是不是EF的责任,更下降到您的一般应用设计。 一个相对简单的背景或定期轮询过程将解决您的问题。

多用户,如记录锁定打交道时有更多的考虑,它可能是一个想法,做一些研究的东西,这个侧面和回来,如果当你有一个具体问题。



文章来源: Entity Framework data updates in a multi-user environment with central database