1

我已经四处搜索,但我无法找到这个特定问题的答案。实体容器名称出现的大多数结果与未清理的 .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.configorweb.config然后获取环境变量,ObjectContext如下所示:

public static Entity CreateDBConn()
{
    string env = WebConfigurationManager.AppSettings["env"].ToString();
    return Entity.Create(env);
}

我真的很想了解正在发生的事情以及为什么其他应用程序可以使用相同的容器名称但 Web 服务不能,以及针对此特定问题的最佳“修复”是什么。谢谢

4

2 回答 2

0

这类似于我收到的关于嵌套 web.config 文件创建同名连接字符串的错误消息 - 这听起来像是您的项目设置中的情况?如果是这样,您可以使用该<clear/>指令,例如:

<connectionStrings>
    <clear/>
    <!--Used to clear inherited connection strings for when this is deployed as a child application. (Avoids the name collision)-->
    <add name="DbContext" connectionString="MyString" providerName="System.Data.SqlClient" />
</connectionStrings>
于 2013-08-26T20:46:49.850 回答
0

这可能适用于正常的配置文件设置,但是我不使用 Web.config 文件作为连接字符串。我使用 SqlConnectionStringBuilder 和 EntityConnectionStringBuilder 来创建连接字符串。通常从 web.config 或 app.config 文件中提取的数据值保存在一个单独的 xml 文件中,该文件对所有应用程序都是通用的,然后由我创建的用于创建连接字符串的类解析。

该类的目的是创建一个可重用的连接字符串,该连接字符串向外部库提交 ObjectContext 连接的请求,而无需不断地重新解析 xml 文件。

我将研究 /clear 命令,看看它是否适合我正在尝试做的编程。

为了完成这项工作,我最终创建了第二个具有不同命名空间的 edmx 文件,从而解决了冲突。我想重新审视这个问题,所以如果我找到更好的方法来解决这个问题,我会发布。

谢谢!

于 2013-10-24T20:01:34.250 回答