database - 将 Effort(EF 测试工具)与计算列结合使用

标签 database entity-framework c#-4.0 integration-testing effort

我有许多直接访问数据库的集成测试 - 创建测试先决条件对象 - 执行测试然后清理 - 但是我想在内存中尝试相同的方法。

我刚刚使用了 Effort 在我的项目中,它工作起来非常容易。但是,我遇到了一个我一直在尝试但无法解决的问题。

我需要用虚拟数据填充的其中一个表(作为测试先决条件)包含计算列(nvarchar,非空)。对于测试范围,我真的不关心该列的值 - 但即使我尝试插入虚拟数据,我的数据也会被忽略,然后我会遇到错误:

"Column 'x' cannot be null. Error code: GenericError"

在我的测试中,我使用与实际代码使用的相同的 edmx 文件。这使我无法不断更新 edmx 副本。

有没有一种方法可以强制测试更新 edmx(在运行时),以便该列是可为 null 的非计算列? [覆盖 OnModelCreating] 或有没有办法插入默认值(此列的任何内容)以阻止此错误? [覆盖 SaveChanges]

我目前尝试了以下方法:

  • 使用 .Attach() 而不是 .Add() 附加对象
  • 添加后将 EntityState 设置为 Unchanged
  • 通过 Entry.OriginalValues 强制值 [这个值是因为实体处于添加状态]

编辑:

我已经尝试覆盖 OnModelCreating 方法,但无济于事,因为这是 DB-First。

modelBuilder.Entity<Entity_Name>().Property(p => p.x).IsOptional().HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None);

最佳答案

在 XML 编辑器中打开您的 EDMX 文件,在 StorageModels 下找到您的实体, 并添加到列定义 StoreGeneratedPattern="Computed"

但是如果您更新或删除并添加该表,您将丢失此修改。实际上,您可以编写控制台应用程序来更新您的 edmx 文件并在需要的地方添加 StoreGeneratedPattern="Computed",然后您可以将这些应用程序添加到工作室中的预构建事件中。

关于database - 将 Effort(EF 测试工具)与计算列结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28232210/

相关文章:

c# - 尝试激活 'Microsoft.AspNetCore.Identity.UserManager' 时无法解析类型 'WebShop.Controllers.User.UserController' 的服务

c# - EF upsert 是否必须手动完成?

c# - 哪些 LINQ 语句强制 Entity Framework 从数据库返回?

html - C#如何在母版页上实现这种情况?

asp.net - 如何防止 ?Area= 添加到生成的 URL 中

mysql - 如果 future 不可用,请选择 future 或过去的日期

.net - SQL 服务器 : wait for new row

asp.net-mvc-3 - MVC3 Razor foreach 问题

database - Linq to Sql - 如何使用存储库模式更新对象?

mysql - 在这种情况下如何避免死锁?