【问题标题】:Where to set the DbConfiguration in a WCF service for EF6 code first?首先在哪里为 EF6 代码设置 WCF 服务中的 DbConfiguration?
【发布时间】:2018-01-20 12:21:24
【问题描述】:

尝试首先将 EF 6 代码用于 WCF 服务,但遇到以下运行时错误:

实体框架使用了默认的 DbConfiguration 实例 在发现“MyConfiguration”类型之前。一个实例 使用前必须在应用程序启动时设置“MyConfiguration” 任何实体框架功能或必须在 应用程序的配置文件。看 http://go.microsoft.com/fwlink/?LinkId=260883 了解更多信息。

尝试在服务调用中实例化以下 DbContext 时会引发此错误:

[DbConfigurationType(typeof(MyConfiguration))]
public partial class MyContext : DbContext
{
    public MyContext()
        : base("name=MyContext")
    {
    }
}

public class MyConfiguration : DbConfiguration
{
    public MyConfiguration()
    {
        SetExecutionStrategy(MySqlProviderInvariantName.ProviderName, () => new MySqlExecutionStrategy());
        SetDefaultConnectionFactory(new MySqlConnectionFactory());
        AddDependencyResolver(new MySqlDependencyResolver());
    }
}

这个 WCF 服务有其他 DbContexts 在这个类被访问之前使用,所以错误消息非常有意义。问题是应该在哪里设置配置?

【问题讨论】:

  • 它应该在WCF服务的配置中,因为最后是应用程序,它正在运行,从而具有有效的配置。参考:thisthis
  • 删除[DbConfigurationType(typeof(MyConfiguration))],再试一次。
  • 谢谢,问题似乎是由项目中已创建的其他 EF 上下文引起的。必须做更多的研究才能找到解决方案。

标签: mysql entity-framework wcf ef-code-first


【解决方案1】:

在 MyContext 上创建一个构造函数,如下所示:

public MyContext(DbConnection dbConnection, bool contextOwnsConnection)
    : base(dbConnection, contextOwnsConnection)
{
}

然后手动提供一个 MySqlConnection:

var connection = new MySqlConnection(connectionString);
connection.Open();
var context = new MyContext(connection, true);

【讨论】:

    猜你喜欢
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    相关资源
    最近更新 更多