我有许多直接访问数据库的集成测试——创建测试先决条件对象——执行测试然后清理——但是我习惯于在内存中尝试相同的方法。
我刚刚在我的项目中使用了Effort,它很容易工作。但是,我遇到了一个我一直在尝试但无法解决的问题。
我需要填充虚拟数据的表之一 - 作为测试先决条件 - 包含一个计算列(nvarchar,非空)。对于测试的范围,我真的不关心该列的值 - 但即使我尝试插入虚拟数据,我的数据也会被忽略,然后我会遇到错误:
"Column 'x' cannot be null. Error code: GenericError"
在我的测试中,我使用与实际代码相同的 edmx 文件。这使我无法不断更新 edmx 副本。
有没有一种方法可以强制测试更新 edmx(在运行时),以便该列是可为空的非计算列?[覆盖 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);