无法将值 NULL 插入到 DatabaseGenerated Option.Compute 的列中
本文关键字:Compute Option DatabaseGenerated NULL 插入 | 更新日期: 2023-09-27 18:32:16
我正在使用EntityFramework,我正在尝试使用计算列
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public bool IsComplete
{
get
{
if (Steps == null) return false;
var stepCount = Steps.Count;
var completedCount = Steps.Count(s => s.IsComplete = true);
return stepCount == completedCount;
}
private set { }
}
但是每当我尝试保存模型的新对象时 - 都会给我
Cannot insert the value NULL into column 'IsComplete'
我认为计算列是计算的,并且在保存模型的新对象时不必包含任何数据。
有人知道问题是什么吗?
DatabaseGenerated Option.Computed 意味着数据库本身应该处理此字段,而实体框架不应参与生成此字段,例如 DateCreated 字段的 DEFAULT GETDATE() - 请参阅此处的计算 "数据库在插入或更新行时生成值"。
http://entityframework.codeplex.com/SourceControl/changeset/view/a5faddeca2be#src/EntityFramework/DataAnnotations/Schema/DatabaseGeneratedOption.cs
在我看来,您正在尝试实现一些基于实体数据(即CalculateIsComplete())的业务逻辑,这些数据可能应该存在于您的实体之外。有几种方法可以做到这一点,也许您有一个服务或明显的层来在您的应用程序中实现此业务逻辑,或者您可以使用扩展方法,例如:
public static bool IsComplete(this MyClass obj)
{
if (obj.Steps == null) return false;
var stepCount = obj.Steps.Count;
var completedCount = obj.Steps.Count(s => s.IsComplete = true);
return stepCount == completedCount;
}