在Azure Web和Worker角色中共享SQL Server CE数据库

时间:2013-07-28 11:11:13

标签: c# entity-framework azure sql-server-ce

我正在尝试在Azure Web和Worker角色中使用SQL Server CE数据库,并将其与EF一起使用。我安装了EntityFramework.SqlServerCompact (v4.3.6),似乎在worker角色上工作正常。 (将数据放入数据库中。)

虽然当我尝试从Web角色中读取数据时,它似乎无法识别由worker角色创建的数据库,并创建了一个新的数据库。

数据库似乎是由\Debug\roles\WorkerRoleName\approot的工作人员角色创建的。

创建数据库的最佳位置是什么? (Web角色的App_Data?或blob存储位置?)以及如何配置EF以使其在同一位置查看,无论我向哪个角色询问数据?

如果SQL Server CE无法做到这一点,我还有哪些其他选择? (不想使用SQL Azure或表存储)

由于

1 个答案:

答案 0 :(得分:2)

我认为您会发现SQL Server CE不适合您,因为它是本地安装的数据库。我不确定您是否已经测试了多个工作者角色实例,但您应该发现这些实例不会看到彼此的数据(每个实例都是自己的虚拟机)。 SQL Server CE将其数据库文件(.sdf文件?)存储在实例的本地文件夹中。如果没有设置某种类型的文件共享,您将无法从安装它的实例以外的任何位置访问此文件。在你去探索像SMB这样的东西之前,你应该考虑一下SQL Server CE是如何工作的,以及它是否甚至支持多个数据库引擎试图读/写相同的文件。

我不确定为什么要避免使用SQL数据库(以前称为SQL Azure),因为它是db-as-a-service,并且可以被所有角色实例访问,无论是Web还是worker(或者从其他地方)。表存储是完全不同的,而不是基于SQL的数据存储,所以这是有道理的。

另一个选择是考虑在虚拟机中运行SQL Server,因为SQL Server支持多个客户端,就像SQL数据库一样。虚拟机库中有一个SQL Server映像,可用于启动数据库。然后,您可以通过虚拟网络或IP-ACL端点保护从云服务到SQL虚拟机的连接,只允许您的云服务的IP地址访问它。