使用Effort(EF测试工具)和计算列

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

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

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

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

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

在我的测试中,我使用的是与实际代码相同的edmx文件。这可以防止我不断更新edmx副本。

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

我目前尝试过以下方法:

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

编辑:

我已经尝试重写OnModelCreating方法,但没有用,因为这是DB-First。

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

热门答案

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

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




许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因