The default DbConfiguration instance was used before the 'EntityFrameworkConfiguration' type was discovered

前端 未结 3 1389
情歌与酒
情歌与酒 2021-01-11 17:09
 public class EntityFrameworkConfiguration : DbConfiguration
    {
        public EntityFrameworkConfiguration()
        {
            this.SetModelCacheKey(ctx =>         


        
相关标签:
3条回答
  • 2021-01-11 17:44

    In my case i have two different edmx files and both are in different class libraries. I got this error when i added those two libraries in the same project.

    I don't have any single clue how is that sorted out but; when i call any method from my first DbContext class, the second one worked like miracle happened. It was throwing this error when second context class called first. My Ef version is: 6.4

    0 讨论(0)
  • 2021-01-11 18:06

    If you are using Code-based configuration, try updating the config file thusly:

    <entityFramework codeConfigurationType="MyNamespace.MyDbConfiguration, MyAssembly">
        ...Your EF config...
    </entityFramework>
    
    0 讨论(0)
  • 2021-01-11 18:08

    Your question doesn't state how you are using this custom DbConfiguration.

    You could get this error a couple of different ways.

    Configuration style setup

    as described here: Entity Framework Config File Settings

    Configuration as code

    as described here: Entity Framework Code-Based Configuration (EF6 onwards) You can hack at this style by doing things like DbConfiguration.SetConfiguration(xxxx). I didnt find this useful at all.

    What this really comes down to is how you construct your DbContext.

    Configuration file style constructors https://github.com/aspnet/EntityFramework6/blob/master/src/EntityFramework/DbContext.cs#L75 With no arguments - EF6 is uses the configuraiton files to determine the right DbCofniguration to use

    with some "connection string-like" arguments again EF6 is using configuration files to determine the DbConfiguration

    no config, or bad config - and you will get this sort or exception

    Configuration as Code style constructors https://github.com/aspnet/EntityFramework6/blob/master/src/EntityFramework/DbContext.cs#L139

    I think this yields better control.

    Attribute your DbContext, then use a manually created 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();
                }
    
    0 讨论(0)
提交回复
热议问题