我有许多集成测试直接访问数据库——创建测试前提对象——执行测试,然后进行清理。但是我想尝试在内存中使用相同的方法。
我刚刚在我的项目中使用了Effort,它非常容易使用。但是我遇到了一个问题,我一直在尝试解决,但无法解决。
其中一个表需要用虚拟数据填充,作为测试前提条件,并包含一个计算列(nvarchar,非空)。对于测试的范围,我真的不关心该列的值,但即使我尝试插入虚拟数据,我的数据也会被忽略,然后我会遇到错误:
在我的测试中,我使用与实际代码相同的edmx文件。这样可以避免我不断更新edmx副本。
是否有办法强制测试在运行时更新edmx,以便该列是可空的非计算列?[覆盖OnModelCreating]或者是否有方法插入一个默认值(对于这一列任何值都可以)来停止这个错误?[覆盖SaveChanges]
我目前尝试了以下内容:
- 使用.Attach()而不是.Add()来附加对象 - 在添加后将EntityState设置为Unchanged - 通过Entry.OriginalValues强制值[因为实体处于Added状态]
编辑:
我已经尝试重写OnModelCreating方法,但由于这是DB-First,所以没有效果。
我刚刚在我的项目中使用了Effort,它非常容易使用。但是我遇到了一个问题,我一直在尝试解决,但无法解决。
其中一个表需要用虚拟数据填充,作为测试前提条件,并包含一个计算列(nvarchar,非空)。对于测试的范围,我真的不关心该列的值,但即使我尝试插入虚拟数据,我的数据也会被忽略,然后我会遇到错误:
"Column 'x' cannot be null. Error code: GenericError"
在我的测试中,我使用与实际代码相同的edmx文件。这样可以避免我不断更新edmx副本。
是否有办法强制测试在运行时更新edmx,以便该列是可空的非计算列?[覆盖OnModelCreating]或者是否有方法插入一个默认值(对于这一列任何值都可以)来停止这个错误?[覆盖SaveChanges]
我目前尝试了以下内容:
- 使用.Attach()而不是.Add()来附加对象 - 在添加后将EntityState设置为Unchanged - 通过Entry.OriginalValues强制值[因为实体处于Added状态]
编辑:
我已经尝试重写OnModelCreating方法,但由于这是DB-First,所以没有效果。
modelBuilder.Entity<Entity_Name>().Property(p => p.x).IsOptional().HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None);