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)