将 SQL Server Compact 4.0.0.1 与 Entity Framework 4.3 一起使用

Posted

技术标签:

【中文标题】将 SQL Server Compact 4.0.0.1 与 Entity Framework 4.3 一起使用【英文标题】:Using SQL Server Compact 4.0.0.1 with Entity Framework 4.3 【发布时间】:2012-02-17 02:11:07 【问题描述】:

错误:

Could not load System.Data.SqlServerCe.Entity.dll. Reinstall SQL Server Compact.

内部异常:

"Could not load file or assembly 'System.Data.SqlServerCe.Entity, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)":"System.Data.SqlServerCe.Entity, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91"

复制步骤:

    创建新的 MVC3 应用程序

    添加 Nuget 包EntityFramework.SqlServerCompact

    <package id="EntityFramework.SqlServerCompact" version="4.1.8482.2" />

    创建模型

    public class TaskItem
    
        [Key]
        public int Id  get; set; 
        public string Description  get; set; 
    
    

    创建数据库上下文

    public class TestContext : DbContext
    
        public DbSet<TaskItem> TaskItems  get; set; 
    
    

    家庭控制器

    public ActionResult Index()
    
        var db = new TestContext();
        // breakpoint on Add() below
        db.TaskItems.Add(new TaskItem  Description = "Get shit done.");
        return View();
    
    

    Web.config 连接字符串和运行时和 System.Data

    &lt;add name="ApplicationServices" connectionString="Data Source=|DataDirectory|Test.sdf" providerName="System.Data.SqlServerCe.4.0" /&gt;

    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
            <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" />
          </dependentAssembly>
          <dependentAssembly>
            <assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845dcd8080cc91" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1" />
          </dependentAssembly>
        </assemblyBinding>
      </runtime>
      <system.data>
        <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>
      </system.data>
    

问题:

Web.config 都是默认的...这里没有什么时髦的...所有的 DLL 都是在本地复制并在 bin 中...我错过了什么?这一定是非常简单的事情。


更新:

从 web.config 中删除 Dependent Assembly 部分解决了问题,但我仍然需要解释原因才能关闭答案。

【问题讨论】:

【参考方案1】:

从您的 web.config 中删除依赖程序集绑定

  <dependentAssembly>
    <assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845dcd8080cc91" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1" />
  </dependentAssembly>

【讨论】:

我遇到了类似的问题。 4.0.0.1 肯定存在,但在删除绑定重定向之前,我一直收到与 OP 相同的错误。 Kori,我删除了同一篇文章,它似乎也让崩溃消失了。在我标记答案之前,我想知道为什么,因为这是开箱即用的香草安装。如果你能找到明确的答案,我会把支票扔给你。同时 +1 进行修复。【参考方案2】:

检查此代码是否在您的项目中创建

EntityFramework.SqlServerCompact.cs under the App_Start folder

using System.Data.Entity;
using System.Data.Entity.Infrastructure;

[assembly: WebActivator.PreApplicationStartMethod(typeof(MyStory.Tests.App_Start.EntityFramework_SqlServerCompact), "Start")]

namespace MyStory.Tests.App_Start 
    public static class EntityFramework_SqlServerCompact 
        public static void Start() 
            Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");
        
    

【讨论】:

在我的情况下,我在 web.config 中找不到“System.Data.SqlServerCe”的dependentAssembly 元素,如何删除这些元素并重试?

以上是关于将 SQL Server Compact 4.0.0.1 与 Entity Framework 4.3 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

将 SQL Server 数据库迁移到 SQL Compact 数据库

SQL Server 2008 到 SQL Server Compact Edition?

是否可以将 PHP 连接到 SQL Server Compact Edition?

在 SQL Server Compact 中返回标识

如何将 SQL Server Compact 3.5 与实体框架一起使用

以编程方式将表添加到 Microsoft SQL Server Compact 3.5 数据库