I am rewriting some code to use EF code first and DbContext. In one of earlier threads it was said that connection string name and context class name should match. However I am getting "The provider did not return a ProviderManifestToken string" exception when I try to open the database.
Here is my old connection string (works fine):
This works fine with old (database first) model.
I have rewritten the connection string to look like this:
and here is the context class:
Code: Select all
    public class GranittEntities : DbContext
    {
        public GranittEntities() : base()
        {
            Database.SetInitializer(null);
        }
        public GranittEntities(string nameOrConnectionString)
            : base(nameOrConnectionString)
        {
            Database.SetInitializer(null);
        }
        public ObjectContext ObjectContext
        {
            get { return (this as IObjectContextAdapter).ObjectContext; }
        }
        public DbSet Roles { get; set; }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove();
            string schemaName = GetSchemaName();
            modelBuilder.Entity().ToTable("EdmMetadata", schemaName);
            modelBuilder.Configurations.Add(new RolesConfiguration(schemaName));
            base.OnModelCreating(modelBuilder);
        }
        private string GetSchemaName()
        {
            foreach (var item in Database.Connection.ConnectionString.Split(';'))
            {
                if (item.Trim().ToLower().StartsWith("user id"))
                {
                    return item.Split('=')[1].Trim().ToUpper();
                }
            }
            return null;
        }
    }
Code: Select all
Test 'CodeFirstTests.GranittModelCodeFirstTests.add_to_roles_should_update_item_collection' failed: System.Data.ProviderIncompatibleException : The provider did not return a ProviderManifestToken string.
  ----> System.InvalidOperationException : Timeout expired.  The timeout period elapsed prior to obtaining a connection from the pool.  This may have occurred because all pooled connections were in use and max pool size was reached.
	at System.Data.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection)
	at System.Data.Entity.ModelConfiguration.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest)
	at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
	at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext)
	at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input)
	at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()
	at System.Data.Entity.Internal.InternalContext.Initialize()
	at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
	at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
	at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
	at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider()
	at System.Linq.Queryable.Count[TSource](IQueryable`1 source)
	CodeFirstTests\Tests.cs(27,0): at CodeFirstTests.GranittModelCodeFirstTests.add_to_roles_should_update_item_collection()
	--InvalidOperationException
	at Devart.Common.DbConnectionFactory.a(DbConnectionBase A_0)
	at Devart.Common.DbConnectionClosed.Open(DbConnectionBase outerConnection)
	at Devart.Common.DbConnectionBase.Open()
	at Devart.Data.Oracle.OracleConnection.Open()
	at Devart.Common.Entity.a1.a(DbConnection A_0)
	at Devart.Data.Oracle.Entity.j.a(OracleConnection A_0, Boolean A_1)
	at Devart.Data.Oracle.Entity.OracleEntityProviderServices.GetDbProviderManifestToken(DbConnection connection)
	at System.Data.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection)