【发布时间】:2015-07-21 12:42:29
【问题描述】:
我正在构建具有下一个结构的 WCF 服务应用程序:
WCF 客户端 -> WCF 服务 -> 业务层 -> 存储库 -> EF6
我的应用程序要求服务侦听多个客户端,每个客户端都可以从不同的数据库(相同的模型)请求数据。所以客户端使用连接方法告诉服务它需要使用的数据库。 为此,我使用了一个创建连接字符串的类。我的问题是如何告诉上下文更改它的连接字符串。到目前为止,我设法通过覆盖这样的构造函数来解决这个问题:
public partial class OhmioNETEntities : DbContext
{
public OhmioNETEntities() : base(SingleConnection.ConString)
{
}
}
这可行,但问题是如果我刷新模型,此代码将丢失并替换为
public partial class OhmioNETEntities : DbContext
{
public OhmioNETEntities() : base("name=OhmioNETEntities")
{
}
}
有没有最好的方法来做到这一点? 谢谢!
编辑 感谢大家的帮助,但我无法让它工作。 按照建议,我使用以下代码添加一个新文件:
public partial class OhmioNETEntities : DbContext
{
public OhmioNETEntities(string ConString)
{
}
}
当我创建我使用的上下文时:
context = new OhmioNETEntities(SingleConnection.ConString);
并得到这个错误:
{“上下文在 Code First 模式下使用,代码是从 EDMX 文件生成的,用于 Database First 或 Model First 开发。这将无法正常工作。要解决此问题,请不要删除该代码行抛出此异常。如果您希望使用 Database First 或 Model First,请确保在启动项目的 app.config 或 web.config 中包含 Entity Framework 连接字符串。如果您正在创建自己的 DbConnection,然后确保它是 EntityConnection 而不是其他类型的 DbConnection,并且将其传递给采用 DbConnection 的基本 DbContext 构造函数之一。要了解有关 Code First、Database First 和 Model First 的更多信息,请参阅实体框架此处的文档:http://go.microsoft.com/fwlink/?LinkId=394715"}
知道为什么吗?谢谢!
【问题讨论】:
-
您可以编辑model.tt模板文件,使您的更改在每次生成代码时都保持不变。
标签: c# entity-framework wcf