我已经四处搜索,但我无法找到这个特定问题的答案。实体容器名称出现的大多数结果与未清理的 .dll 文件或具有相同容器名称的重复 edmx 文件有关。
我有 4 个应用程序通过 3 个不同的环境访问同一个数据库,这些环境都需要自己的连接字符串。1 个控制台应用程序、1 个 Web 应用程序和 2 个 Web 服务。为了消除所有应用程序中 edmx 文件的重复,我将其拉出到它自己的库中,我将其导入到上述每个应用程序中,将字符串传递给构造函数,然后库使用该构造函数来确定何时使用哪个连接字符串创建数据库连接。
对于 Web 应用程序和控制台应用程序,它工作正常。然而,这两个 Web 服务在同一个解决方案中,我发现一旦其中一个建立连接,另一个将获得实体容器名称必须是唯一的异常并且失败。
根据我在论坛上找到的内容,看来我需要创建另一个具有不同容器名称的 edmx,以便两个 Web 服务都可以访问数据库。我想确认的是,这实际上是我需要做的,并且这个问题没有其他解决方法。
我不喜欢仅为 Web 服务创建整个 edmx 的想法,而且似乎应该有一种方法可以通过导入的 .dll 在这两个服务之间共享连接。
另外我不太明白为什么其他应用程序可以通过相同的容器名称访问数据库,而只有 2 个 Web 服务有这个问题?
在库中,我有一个构造函数,它返回ObjectContext
如下:
public partial class Entity : ObjectContext
public static Entity Create(string env)
{
switch(env)
{...}
return new Entity(connectionString from case statement);
}
在客户端应用程序中,我有一个名为的类DbConnection
,它有一个静态方法,可以从app.config
orweb.config
然后获取环境变量,ObjectContext
如下所示:
public static Entity CreateDBConn()
{
string env = WebConfigurationManager.AppSettings["env"].ToString();
return Entity.Create(env);
}
我真的很想了解正在发生的事情以及为什么其他应用程序可以使用相同的容器名称但 Web 服务不能,以及针对此特定问题的最佳“修复”是什么。谢谢