Sto vedendo questo errore quando eseguo la mia app
[MissingMethodException: Method not found: 'System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher System.Data.Entity.Infrastructure.Interception.DbDispatchers.get_Connection()'.]
System.Data.Entity.SqlServerCompact.SqlCeProviderServices.DbCreateDatabase(DbConnection connection, Nullable`1 timeOut, StoreItemCollection storeItemCollection) +0
System.Data.Entity.Core.Common.DbProviderServices.CreateDatabase(DbConnection connection, Nullable`1 commandTimeout, StoreItemCollection storeItemCollection) +75
System.Data.Entity.Core.Objects.ObjectContext.CreateDatabase() +132
Codice:
var db = new AuditDb();
db.Database.CreateIfNotExists(); // blows up!
or
db.Set<CampaignAudit>().Find(0); // same error
Riferimenti:
EntityFramework: 6.0.0.0
EntityFramework.SqlServerCompact: 6.0.0.0
System.Data: 4.0.0.0
System.Data.SqlServerCe: 4.0.0.0
Contesto:
[DbConfigurationType("MvcTest.Data.AuditDBConfiguration, MvcTest")]
public class AuditDb : DbContext
{
// tried this approach as well:
// static AuditDb() { Database.SetInitializer(new CreateDatabaseIfNotExists<AuditDb>()); }
public AuditDb() : base ("Name=AuditDB"){}
public DbSet<CampaignAudit> Audits { get; set; }
protected override void OnModelCreating(DbModelBuilder builder)
{
Map<CampaignAudit>(builder);
...
}
DBConfiguration:
public class AuditDBConfiguration : DbConfiguration
{
public AuditDBConfiguration()
{
SetProviderServices(
SqlCeProviderServices.ProviderInvariantName,
SqlCeProviderServices.Instance
);
SetDefaultConnectionFactory(
new SqlCeConnectionFactory(SqlCeProviderServices.ProviderInvariantName)
);
}
}
web.Config:
<add name="AuditDB" providerName="System.Data.SqlServerCe.4.0" connectionString="Data Source=C:\logs\GroundAuditDb.sdf" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />
</providers>
<DbProviderFactories>
<remove invariant="System.Data.SqlServerCe.4.0" />
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
Non riesco a trovare molto su questo errore. Sembra che manchi una proprietà di connessione su qualche oggetto, o in alcuni config, o qualche componente che sto usando sia una versione errata.
aggiornare
questo è piuttosto folle .. Ho ricreato la soluzione su un'altra macchina (Windows 7 sp1 con VS 2013) e ho ottenuto tutti i progetti di nuget da zero.
Ho aggirato il problema di creare il database creando manualmente il database, ma ora ho iniziato a vedere questo errore:
Could not load type 'System.Data.Entity.Migrations.Model.AlterTableOperation' from assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
così provato abilitando le migrazioni:
Enable-Migrations -ContextTypeName MvcTest.Data.AuditDb
che sta lanciando:
Method not found: 'Void System.Data.Entity.ModelConfiguration.Configuration.EntityMappingConfiguration`1.MapInheritedProperties()
è stato un flusso di errori senza fine in vista ..
qualcuno è stato in grado di far funzionare EF 6 con il codice SQL CE Primo approccio ??
Ho avuto lo stesso problema nella mia soluzione. Il problema era che avevo diverse versioni di EntityFramework in diversi progetti nella soluzione. La mia raccomandazione è di rimuovere la DLL EntityFramework da tutti i progetti, rimuovere la riga su di essa da packages.config e quindi reinstallare usando il comando nuget "Install-Package EntityFramework". In bocca al lupo!