8

让我解释一下标题。

我在应用程序(TestApp)中首先使用实体​​框架代码。出于调试目的,TestApp连接到 SQLExpress 数据库(中央数据库服务器)。

为了简单起见,数据库包含一个表“Products”,TestApp 在数据网格中显示数据库中的所有“Products”,TestApp 可以添加/删除“Product”或修改 ProductName。

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

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

例如,我有 3 台安装并运行 TestApp 的电脑(我将它们称为 Client_X)。如果我通过 Client_1 添加一个新的“产品”,那么这在 Client_2 和 Client_3 上的 TestApp 中是不直接可见的。只有当 Client_2 和 Client_3 再次获取所有数据(手动刷新)时,我才会看到新添加的记录。

我想知道的:如何通过 EF Code First 了解数据库的变化?由于添加或删除了新项目,Client_2 和 Client_3 如何自动更新其数据网格?

我不确定它是否被问得太多,但是一个简单的示例项目或简单的代码来证明这一点会很有用。

仅供参考:我对 EF Code First 还很陌生。(我使用的是 .NET 4.0 和 EF Code First 4.3.1)

提前致谢。

方案:

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

更新/编辑:

好的,很明显实体框架本身不会在多个客户端之间进行任何同步。

所以我会问另一个问题: 我正在考虑以客户端-服务器方式工作:

  • 创建数据库并首先使用实体​​框架代码的单个服务器应用程序。
  • 与该单个服务器应用程序通信的多个客户端。

    现在确保客户端使用相同数据并查看彼此更新/更改的最佳方法是什么?(我会很感激代码示例。)

4

2 回答 2

6

您无法使用实体框架来通知客户端。您可以为 编写重载SaveChanges或创建扩展方法,但就您没有客户端-> 服务器架构而言,我无法想象您如何实现这一点。

如果您使用 WCF 作为数据库的网关,您可以在客户端和服务器之间创建双工通信,并且当新记录可用时,将使用回调通道通知客户端。

另一种方法是使用 MS SQL 服务代理概述(Service Broker)

尽管有许多不同的方法可以得到想要的结果,但它们都与实体框架无关,因为它是 ORM,也不是应用程序框架或使用 .NET 构建的应用程序的通信框架。

于 2012-07-24T11:29:54.067 回答
2

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

在处理多个用户时有更多考虑因素,例如记录锁定,并且可能对这方面的事情进行一些研究,然后在遇到特定问题时再回来。

于 2012-07-24T09:33:32.493 回答