在发现’EntityFrameworkConfiguration’类型之前使用了默认的DbConfiguration实例

public class EntityFrameworkConfiguration : DbConfiguration { public EntityFrameworkConfiguration() { this.SetModelCacheKey(ctx => new EntityModelCacheKey((ctx.GetType().FullName + ctx.Database.Connection.ConnectionString).GetHashCode())); } } 

为了使上面的代码工作,我在web.config中添加了以下行

但对于我正在使用程序集引用的其他项目,我得到例外:

{“在发现’EntityFrameworkConfiguration’类型之前,entity framework使用了默认的DbConfiguration实例。必须在使用任何entity frameworkfunction之前在应用程序启动时设置’EntityFrameworkConfiguration’实例,或者必须在应用程序的配置文件中注册。 http://go.microsoft.com/fwlink/?LinkId=260883了解更多信息。“}

您的问题没有说明您如何使用此自定义DbConfiguration。

您可以通过几种不同的方式获得此错误。

配置样式设置

如下所述: entity framework配置文件设置

配置为代码

如下所述: entity framework基于代码的配置(EF6以上版本)您可以通过执行DbConfiguration.SetConfiguration(xxxx)等操作来hack此样式。 我根本没觉得这很有用。

这真正归结为你如何构建你的DbContext。

配置文件样式构造函数 https://github.com/aspnet/EntityFramework6/blob/master/src/EntityFramework/DbContext.cs#L75没有参数 – EF6使用configuraiton文件来确定要使用的正确DbCofniguration

再次使用一些“连接字符串”参数,EF6正在使用配置文件来确定DbConfiguration

没有配置或错误的配置 – 你会得到这种或exception

配置为代码样式构造函数 https://github.com/aspnet/EntityFramework6/blob/master/src/EntityFramework/DbContext.cs#L139

我认为这会带来更好的控制。

属性您的DbContext,然后使用手动创建的DbConnection

 public class EntityFrameworkConfiguration : DbConfiguration { public EntityFrameworkConfiguration() { this.SetModelCacheKey(ctx => new EntityModelCacheKey((ctx.GetType().FullName + ctx.Database.Connection.ConnectionString).GetHashCode())); } } [DbConfigurationType(typeof(EntityFrameworkConfiguration))] public class MyContext : DbContext { public MyContext(DbConnection existingConnection, bool contextOwnsConnection) : base(existingConnection, contextOwnsConnection) { } public DbSet Stuff { get; set; } } using(var conn = new SqlConnection(asqlserverConnectionString)) using (var db = new MyContext(conn, true)) { var value = await db.Stuff.Where(s => s.xxx.Equals(primaryKey)).Select(s => new { s.BinaryContent } ).SingleOrDefaultAsync(); } 

如果您使用的是基于代码的配置 ,请尝试更新配置文件:

  ...Your EF config...