Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 使用计算列的作用力(EF测试工具)_Database_Entity Framework_C# 4.0_Integration Testing_Effort - Fatal编程技术网

Database 使用计算列的作用力(EF测试工具)

Database 使用计算列的作用力(EF测试工具),database,entity-framework,c#-4.0,integration-testing,effort,Database,Entity Framework,C# 4.0,Integration Testing,Effort,我有许多直接访问DB的集成测试—创建测试先决条件对象—执行测试,然后进行清理—但是我习惯在内存中尝试相同的方法 我刚刚在我的项目中使用了它,它非常容易工作。然而,我遇到了一个问题,我一直在尝试,但无法解决 作为测试的先决条件,我需要用虚拟数据填充其中一个表,其中包含一个计算列(nvarchar,而不是null)。对于测试的范围,我真的不关心该列的值-但即使我尝试插入虚拟数据,我的数据也会被忽略,然后我会遇到一个错误: "Column 'x' cannot be null. Error code:

我有许多直接访问DB的集成测试—创建测试先决条件对象—执行测试,然后进行清理—但是我习惯在内存中尝试相同的方法

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

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

"Column 'x' cannot be null. Error code: GenericError"
在我的测试中,我使用与实际代码相同的edmx文件。这会阻止我不断更新edmx副本

是否有一种方法可以强制测试更新edmx(在运行时),使列成为可为null的非计算列?[overriding on ModelCreating]或者是否有方法插入默认值(此列的任何内容)来停止此错误?[覆盖保存更改]

我目前尝试了以下方法:

  • 使用.Attach()而不是.Add()附加对象
  • 添加后将EntityState设置为未更改
  • 通过Entry.OriginalValues强制值[由于实体处于添加状态,因此此值为]
编辑:

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

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

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


但是,如果您更新或删除并添加该表,您将失去此修改。实际上,您可以编写控制台应用程序来更新您的edmx文件,并在需要时添加
StoreGeneratedPattern=“Computed”
,您还可以将这些应用程序添加到studio中的预构建事件中。

问题的原因是工作数据库中的一个错误。当计算列基于不可为空的列时,计算列也将自动变为不可为空。因此,努力数据库需要一个非空值。通过最新更新,问题得以解决。您必须将全局
EntityFrameworkEffortManager.UseDefaultForNotNullable
标志设置为true


请看

我想您还没有回答这个问题。模型已经设置为computed。我想要相反的效果-但仅用于测试。因此,我无法删除实际EDMX中的“计算”字段。