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

时间:2015-08-24 08:34:34

标签: c# .net entity-framework

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

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

但是对于我正在使用程序集引用的其他项目,我会遇到异常:

  

{"实体使用默认的DbConfiguration实例   ' EntityFrameworkConfiguration'之前的框架类型是   发现。 ' EntityFrameworkConfiguration'的实例必须设定   在应用程序启动之前使用任何实体框架功能或   必须在应用程序的配置文件中注册。看到   http://go.microsoft.com/fwlink/?LinkId=260883了解更多信息。"}

3 个答案:

答案 0 :(得分:3)

您的问题并未说明您使用此自定义DbConfiguration的方式。

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

配置样式设置

如此处所述:Entity Framework Config File Settings

配置为代码

如此处所述:Entity Framework Code-Based Configuration (EF6 onwards) 你可以通过像DbConfiguration.SetConfiguration(xxxx)这样的方式hack。我根本没有发现它有用。

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

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

有一些"连接字符串"参数EF6正在使用配置文件来确定DbConfiguration

没有配置或错误的配置 - 你会得到这种排序或异常

配置为代码样式构造函数 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> 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();
            }

答案 1 :(得分:1)

如果您使用的是Code-based configuration,请尝试这样更新配置文件:

tag_key_f = input("Enter Tag Name to find: ")
tag_val_f = input("Enter Tag Value to find: ")
instances = ec2.describe_instances(Filters=[{'Name': 'tag:tag_key_f', 'Values': [tag_val_f]}])

答案 2 :(得分:0)

就我而言,我有两个不同的edmx文件,并且都位于不同的类库中。 当我在同一个项目中添加这两个库时出现此错误。

我没有任何线索可以找到答案,但是;当我从第一个DbContext类调用任何方法时,第二个方法就像奇迹一样发生了。当第二个上下文类首次调用时,抛出此错误。 我的Ef版本是:6.4