Entity Framework 5.0 PostgreSQL (Npgsql) 默认连接工厂

2024-01-01

我试图首先使用 PostgreSQL(Npgsql 提供程序)获取 EF 5.0 代码。我通过 NuGet 安装了 Npgsql 2.0.12.1(尽管引用的程序集是 2.0.12.0)。 我在 app.config 中声明了 Npgsql(默认连接工厂和提供程序工厂):

<entityFramework>   
    <defaultConnectionFactory type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.12.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7" />
 </entityFramework>
 <system.data>
        <DbProviderFactories>
          <add name="Npgsql Data Provider"
                invariant="Npgsql"
                description="Data Provider for PostgreSQL"
                support="FF"
                type="Npgsql.NpgsqlFactory, Npgsql, Version=2.0.12.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"/>
        </DbProviderFactories>
 </system.data>

我成功运行了以下测试:

[Test]
public void DatabaseConnection_DatabaseFactoryTest()
{
    var factory = DbProviderFactories.GetFactory("Npgsql");
    var conn = factory.CreateConnection();
    conn.ConnectionString = _connectionString;
    var npg = (NpgsqlConnection)conn;
    var result = TestConnectionHelper(npg); // scalar select version(), nothing particular
    Assert.AreEqual(result, "PostgreSQL 9.2.2, compiled by Visual C++ build 1600, 64-bit");            
}

这意味着至少数据库实例正在运行并且提供程序已成功配置。 现在我想要的是使用从 DbContext 继承的自定义数据库上下文,它将绑定到相同的提供程序并通过连接字符串初始化:

public class InventoryContext : DbContext
{
    public InventoryContext(string nameOrConnectionString) : base(nameOrConnectionString)
    {
    }
    // mappings and properties, cut for conciseness
}

以下测试失败:

[Test]
public void DatabaseConnection_DatabaseContextTest()
{
    using (var ctx = new InventoryContext(_connectionString))
    {
        //var db = ctx.Database;
        ctx.InventoryObjects.Add(_inventoryObject); // exception here
        ctx.SaveChanges();
    }
}   

It says

Failed to set Database.DefaultConnectionFactory to an instance of the 'Npgsql.NpgsqlFactory, Npgsql, Version=2.0.12.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7' type as specified in the application configuration. See inner exception for details.

内部异常是 InvalidOperationException :

{"Constructor for type \"Npgsql.NpgsqlFactory\" is not found."}

我猜想连接字符串有问题(它不包含 Npgsql 提供程序):

"Server=127.0.0.1;Port=5432;User Id=postgres;Password=p4ssw0rd;Database=InventoryDatabase;";

以编程方式解决这个问题的最优雅的方法是什么?刚刚尝试将 connectionString 从 app.config 传递到上下文的构造函数,它有效。
edit
已将测试项目上传到 Dropbox -VS2012 解决方案,10 MB https://dl.dropbox.com/u/14800693/Median.Inventory.zip


深入研究问题,发现这是由于 Npgsql 引用 EntityFramework 4.4.0 程序集引起的。解决如下:

  1. 添加 EF Nuget 包到测试项目(针对 FW 4.5 构建);
  2. 在Npgsql2010项目中手动添加对EntityFramework.dll版本5的引用(Nuget默认添加4.4.0);
  3. 将 Npgsql app.config 中的程序集绑定更改为“EntityFramework,版本=5.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089”;
  4. 如上所述已修复“找不到类型“Npgsql.NpgsqlFactory”的构造函数将构造函数公开时出错;
  5. 修复了以下错误“无法将 NpgsqlFactory 转换为 IDbConnectionFactory”通过在 NpgsqlFactory 上实现 IDbConnectionFactory 接口:

    使用系统.数据.实体.基础设施;
    ...
    公共密封类 NpgsqlFactory :DbProviderFactory、IServiceProvider、IDbConnectionFactory
    ...
    公共DbConnection CreateConnection(字符串名称OrConnectionString)
    {
    返回新的 NpgsqlConnection(nameOrConnectionString);
    }
    d

现在我遇到与 EF 相关的“错误:3F000:架构“dbo”不存在”。我在 DbContext 的 OnModelCreating 中映射到 PostgreSQL 标准公共模式: modelBuilder.Entity().ToTable("TableName", "public") 。期待这个问题的解决。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Entity Framework 5.0 PostgreSQL (Npgsql) 默认连接工厂 的相关文章

  • 无需登录即可在 Intranet 上获取 Web 应用程序的域\用户名

    我的 Intranet 上有一个 Web 应用程序 VS 2005 有几个页面不需要用户登录应用程序 反馈和默认页面 我正在尝试获取要显示和 或发送反馈的域名和用户名 有没有一种方法可以在不需要用户登录的情况下执行此操作 我试过了this
  • 在异步请求中使用超时回调

    我之前问过这个问题 但我将用提出的解决方案来完成这个问题 并提出另一个问题 我正在使用这个类来进行异步网络请求 http msdn microsoft com en us library system net webrequest aspx
  • 如何检查号码是否只有唯一的数字?

    例如 2345 是唯一的数字 因为没有数字显示两次 但 3324 不是唯一的数字 因为 3 出现了两次 我尝试使用 但我 代码 显示但我没有得到数字我得到了数字 编辑 你不能使用字符串 number 10 number 100 number
  • 如何部署包含第三方 DLL 文件的 C# 应用程序?

    首先 我对部署了解不多 我希望我的问题有意义 我需要将 C 应用程序安装 部署到多个桌面 它需要一个第三方 DLL 文件 一个 C 库 lpsolve55 dll 对于那些感兴趣的人 它是一个免费的 MIP LP 求解器 请参阅 lpsol
  • 多线程 - 比单线程慢

    当我使用多个线程而不是单线程运行程序时 它会变慢 不是应该更快吗 该程序应该遍历从起始目录开始的所有目录 并查找并打印所有名为 X 的文件 代码如下 while done pthread mutex lock lock if list is
  • 从 Golang 调用 C 函数

    我想在 Golang 中编写控制器逻辑并处理 json 和数据库 同时在 C 中使用我的数学处理模型 在我看来 调用 C 函数的开销必须尽可能低 就像设置寄存器 rcx rdx rsi rdi 一样 执行一些操作fastcall 并获取 r
  • 根据 Active Directory 策略检查密码[重复]

    这个问题在这里已经有答案了 我有一个允许用户更改其 AD 密码的前端 有没有办法获取特定用户及其属性 长度 复杂性 的密码策略 例如细粒度 有没有办法根据此特定策略检查字符串 xyz121 编辑 我不想检查活动目录中存储的当前密码 我想检查
  • 为什么 rand() 总是返回相同的值? [复制]

    这个问题在这里已经有答案了 可能的重复 在C中生成随机数 https stackoverflow com questions 3067364 generating random numbers in c 使用 rand 生成随机数 http
  • 重定向 std::cout

    我需要一个类 在其对象的生命周期内将一个 ostream 重定向到另一个 ostream 经过一番修补后 我想出了这个 include
  • 文件加密与解密问题

    我一直在尝试在 VC Express 2010 中加密和解密文件 我见过的所有教程和文档都需要两个FileStreams 来加密文件 一个用于读取未加密的版本 另一个用于加密 当我实际编写代码时 它不断抛出错误 告诉我它无法打开该文件 因为
  • 如何解决文件被另一个进程使用的问题?

    我一直在 VS NET 2010 中调试 没有任何问题 但现在无法建造 我收到错误 Unable to copy file filename to bin Debug filename The process cannot access t
  • 这些工作队列标志意味着什么?

    在研究工作队列时 我遇到了内核中定义的工作队列标志和常量 我有以下我无法理解的疑问 这里的排水和救援到底是什么意思 WQ DRAINING 1 lt lt 6 internal workqueue is draining WQ RESCUE
  • 在 Windows 上使用 C/C++ 开发时省略 msvcr100.dll?

    是否可以在 Windows 上使用 C C 进行开发而不链接到 msvcr100 dll 我知道这是 Windows 的标准 c 库 但我想知道如果我没有安装 Visual Studio 或 Redistributable 软件包 我的计算
  • 如何使用 C# 将表格粘贴到 Ms-Word 文档的末尾

    我有一个预制的 Word 模板 其中有一个表格 我想打开它 然后在文档末尾添加 粘贴 另一个表格 问题是它不会转到文档的末尾 而是将新表格粘贴到原始表格的第一个单元格中 任何帮助将不胜感激 previous code copied a ta
  • Code::Blocks 中的调试似乎不起作用 - 缺少调试符号

    我正在尝试在 Code Blocks 中调试程序 我跟着本指南 http wiki codeblocks org index php title Debugging with Code Blocks and 这个短视频 http www y
  • 按 Enter 继续

    这不起作用 string temp cout lt lt Press Enter to Continue cin gt gt temp cout lt lt Press Enter to Continue cin ignore 或更好 in
  • C# 模式匹配

    我对 C 有点陌生 我正在寻找一个字符串匹配模式来执行以下操作 我有一个像这样的字符串 该书将在 唐宁街 11 号接待处 并将由主要医疗保健人员参加 我需要创建一个 span 标签来使用 startIndex 和 length 突出显示一些
  • 在两个点之间创建一条曲线,每个点都具有标准化向量

    因此 我需要一种写入方法来在两点之间创建一条曲线 每个点都有一个指向任意方向的归一化向量 我一直在尝试设计这样一种方法 但一直无法理解数学 在这里 由于一张图片胜过一千个文字 这就是我所需要的 在图中 矢量垂直于红线 我相信向量需要进行相同
  • execlp() 系统调用输出错误

    这个非常简单的例子exec 系统调用 在这里 我试图打电话execlp 两次 但是 我没有得到例外的输出 它仅显示当前目录的第一次调用的输出 include
  • 线程安全的有限大小队列,不使用锁

    我正在尝试编写一个主题队列 但遇到死锁和其他多线程问题 我想用Interlocked CompareExchange避免lock用法 但这段代码并没有按预期工作 它只是擦除整个队列 我在这里做错了什么 public class FixedS

随机推荐

  • 在 Docker 容器中开发时如何管理权限?

    在Linux上的Docker容器中进行开发时 存在一个权限问题 如何管理主机和容器之间的文件所有权和权限 想象一下 我有一个运行 Ubuntu 的 Docker 映像和一个 Apache 服务器 使用 Apache 最新版本 的默认设置 文
  • Razor 输出 @-webkit-keyframes

    如何在 razor 页面中输出 webkit keyframes 我已经尝试过了 webkit keyframes progressBar 0 width 0 100 width 100 但似乎不起作用 谢谢 在 关键帧 或 Webkit
  • 如何在 LookupEdit (Devexpress) 中获取 GridControl 的实例

    没什么可说的 只是想要 DXGrid 的实例 其中我有一个 LookUpEdit 我正在使用 WPF mylookupedit1 GridControl 编辑 这是一些示例代码
  • Python(PIL):淡化透明图像并粘贴到另一张图像

    我有两个相同大小的 png 图像 A 和 B 第二个 B 是部分透明的 如果我使用代码将图像 B 粘贴到图像 A 中 base paste overlay mask overlay 我得到了它们近乎完美的组合 但我想在将图像 B 粘贴到图像
  • 多进程守护进程不会在父进程退出时终止

    我有一个 Python 2 7 多处理进程 它不会在父进程退出时退出 我已经设置了守护进程标志 该标志应该强制它在父进程死亡时退出 文档指出 当一个进程退出时 它会尝试终止其所有守护进程子进程 p Process target server
  • 在对域进行建模时是否应该考虑“每个聚合一个事务”的规则?

    考虑到领域事件模式和这一点post http lostechies com jimmybogard 2010 04 08 strengthening your domain domain events 为什么人们建议每个交易模型保留一个聚合
  • 为什么我无法使用 SDL2 创建 OpenGL ES 3.0 上下文?

    我在 Debian 稳定版上使用 SDL2 2 0 2 并且尝试使用它获取 OpenGL ES 3 0 上下文 如果我请求 OpenGL ES 2 0 上下文 则此方法有效 但如果我直接请求 OpenGL ES 3 0 上下文 则此方法无效
  • iOS 上的 GCM 生成令牌时出错:(com.google.iid 错误 7。)

    我正在开发一个使用推送通知的应用程序GCM 谷歌云消息传递 服务 问题是 有时在生成令牌时 它会显示以下错误 GCM 失败并出现错误 操作无法完成 com google iid 错误 7 有人可以帮我吗 None
  • Devise - 在开发中跳过用户确认

    如何在设计中的开发中跳过用户确认 我已经设置了生产环境以使用 SendGrid 发送电子邮件 但现在我已经这样做了 它不会让我登录 谢谢你的时间 在控制台中创建用户 user User create first name gt admin
  • EC2 用户数据无法通过 python boto 命令运行

    我正在尝试启动一个实例 并在第一次作为用户数据的一部分启动时运行一个脚本 使用以下代码 python boto3 库 import boto3 ec2 boto3 resource ec2 instance ec2 create insta
  • Angular 4:无法从响应中读取标头 - 不是 CORS 问题

    在服务器自动更新令牌的上下文中 我正在努力解决基础知识 从响应中获取标头数据 它似乎与 CORS 无关 因为我的 Node express 允许 Authorization x access token 并相应地响应 请参见下面的网络选项卡
  • 使用 Jenkins 构建 Docker 镜像会导致“发现不支持的协议方案”

    我正在跟进this https www katacoda com courses jenkins build docker images在线教程逐行 但在第 3 步 任务 配置插件 当我按下 测试连接 按钮时 我收到此错误消息 发现不支持的
  • 张量流中使用的钩子是什么意思

    我无法理解python tensorflow中Hook的确切含义 LearningRateSetterHook tf train SessionRun Hook 如果您向我解释一下 我将不胜感激 谢谢 这可能是一个关于什么是钩子的更普遍的问
  • 如何获取 dockerregistryv2 上的镜像列表

    我正在使用 dockerregistry v1 并且有兴趣迁移到较新的版本 v2 但我需要某种方法来获取注册表中存在的图像列表 例如 使用注册表 v1 我可以执行 GET 请求http myregistry 5000 v1 search 结
  • 调整自定义对象的 console.log 行为

    有什么方法可以影响 console log 给出的自定义对象吗 我尝试覆盖 customObject prototype toString 方法 但这不起作用 有任何想法吗 之前的答案在较新版本的节点中已被弃用 现在需要实现的方法是符号 u
  • 将数组的所有元素设置为一个值的最佳方法是什么?

    我有一个整数数组 我想在每次调用函数时将数组中的所有值设置为 x 我看过 memset 但我认为这只适用于字节数组 我可以做明显的 for 循环 但我猜有一个标准的 lib 函数可以更好地完成这个任务 有人知道吗 就循环一下 差不多了 或者
  • 雨果与 Asciidoctor

    我正在尝试用 Hugo 建立一个博客 只要我使用 Markdown 它基本上就可以正常工作 但由于我在存储库中还有一些带有 antora 的其他网站内容 文档 所以我想用 asciidoc 编写所有文本 但当我尝试从 adoc 文件生成网站
  • jest typescript - 模拟日期构造函数

    我试图嘲笑new Date 返回特定日期 下面的代码 const now new Date jest spyOn global Date mockImplementation gt now 给出编译错误 Argument of type g
  • 哪些 Rust 数据结构是不确定的

    编写智能合约时 确保使用的所有数据结构都是确定性的非常重要 具体来说 如果HashMap or HashSet使用 Rust 标准库是否存在可能的非确定性 由于 Wasm 运行时无法访问非确定性输入 因此整个执行是确定性的 HashSet
  • Entity Framework 5.0 PostgreSQL (Npgsql) 默认连接工厂

    我试图首先使用 PostgreSQL Npgsql 提供程序 获取 EF 5 0 代码 我通过 NuGet 安装了 Npgsql 2 0 12 1 尽管引用的程序集是 2 0 12 0 我在 app config 中声明了 Npgsql 默