为什么我开始无法将值NULL插入计算列?

时间:2017-01-02 08:05:43

标签: c# asp.net-mvc entity-framework

我正在使用EF-Code First,这是我的数据注释模型:

public int Count { get; set; }
public int Fee { get; set; }

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public int Total { get; set; }

或者像这样:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]

public int Total
{
    get { return Fee * Count; }
    private set{}
}

当我想创建新记录时,我收到以下错误:

  

无法将值NULL插入“Total”列;列不允许空值。 INSERT失败。   声明已经终止。

正如您所看到的,我在使用模型绑定器的创建操作方法中获得了正确的计算值:

enter image description here

删除DatabaseGenerated(DatabaseGeneratedOption.Computed)并从我的代码中设置计算值,它工作正常,我在数据库中看到更新的总数。但我的问题是,如果我可以在没有DatabaseGenerated(DatabaseGeneratedOption.Computed)的情况下执行此操作,那么DatabaseGenerated(DatabaseGeneratedOption.Computed)用法是什么?

这有效:

public int Total
{
    get { return Fee * Count; }
    private set{}
}

2 个答案:

答案 0 :(得分:1)

如上所述herehere,您无法更新计算列,因为它的值是从数据库中检索出来的,并且从未发回过。

因此,解决方案是在模型中创建另一个not mapped计算属性,该属性将在您的代码中使用,并将Total属性映射到数据库:

public int Count { get; set; }
public int Fee { get; set; }
public int Total { get; set; }

[NotMapped]
public int CalculatedTotal
{
    get { return Count*Fee; }
}

答案 1 :(得分:0)

尝试声明public int? Total接受null。