【发布时间】:2014-07-10 19:32:44
【问题描述】:
我在运行我的应用程序时看到此错误
[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
代码:
var db = new AuditDb();
db.Database.CreateIfNotExists(); // blows up!
or
db.Set<CampaignAudit>().Find(0); // same error
参考文献:
EntityFramework: 6.0.0.0
EntityFramework.SqlServerCompact: 6.0.0.0
System.Data: 4.0.0.0
System.Data.SqlServerCe: 4.0.0.0
上下文:
[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);
...
}
数据库配置:
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>
找不到有关此错误的太多信息。似乎某些对象或某些配置中缺少连接属性,或者我正在使用的某些组件的版本不正确。
更新
这太疯狂了。我在另一台机器上重新创建了解决方案(带有 VS 2013 的 Windows 7 sp1)并从头开始获得所有 nuget 项目。
我通过手动创建数据库绕过了数据库创建问题,但现在开始看到此错误:
Could not load type 'System.Data.Entity.Migrations.Model.AlterTableOperation' from assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
所以尝试启用迁移:
Enable-Migrations -ContextTypeName MvcTest.Data.AuditDb
哪个是扔的:
Method not found: 'Void System.Data.Entity.ModelConfiguration.Configuration.EntityMappingConfiguration`1.MapInheritedProperties()
这是一连串的错误,看不到尽头..
有没有人能够使 EF 6 与 SQL CE 代码优先方法一起工作?
【问题讨论】:
-
你有对 System.Data.Entity 的引用吗(你不应该)?
-
我没有。我确实参考了 System.Web.Entity
-
您需要删除/更新它,它是旧的 EntityDataSource 控件
-
我删除了该引用。没有任何效果。你确定是这个原因吗? System.Data 为 4.0.0.0
-
我在那里真的充满希望.. 注意到我的框架是 4.5,并在项目属性上将其切换到 4.5.1.. 但这并没有解决这个问题:/跨度>
标签: entity-framework sql-server-ce code-first entity-framework-6 dbcontext