Entity framework 如何正确排除UpdateModel中的属性?

Entity framework 如何正确排除UpdateModel中的属性?,entity-framework,updatemodel,Entity Framework,Updatemodel,我使用的是EF,有一个model entity Test.cs,它包含几个属性和计算出的属性偏差。此属性应显示在gridview中,但不应更新此属性。我已将计算列定义如下: [DatabaseGenerated(DatabaseGeneratedOption.Computed)] public decimal? Deviation { get; private set; } 在控制器方法中,我将尝试以下方式保存更改: public virtual ActionResult BatchUpdat

我使用的是EF,有一个model entity Test.cs,它包含几个属性和计算出的属性偏差。此属性应显示在gridview中,但不应更新此属性。我已将计算列定义如下:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public decimal? Deviation { get; private set; }
在控制器方法中,我将尝试以下方式保存更改:

public virtual ActionResult BatchUpdate(MVCxGridViewBatchUpdateValues<T, int> updateValues)
    {
        if (ModelState.IsValid)
        {
            var model = Db.Set<T>();

            // update existing records              updateValues.Update.Where(updateValues.IsValid).ForEach(updateValue => UpdateModel(model.Single(e => e.Id == updateValue.Id), null, null, excludeProperties: new[] { "Deviation" }));

            // apply changes
            Db.SaveChanges();
        }
        else
        {
            throw new Exception("Model is invalid");
        }

        return GridViewPartial();
    }
公共虚拟操作结果批更新(MVCXGridViewBatchUpdateValue更新值) { if(ModelState.IsValid) { var model=Db.Set(); //更新现有记录updateValues.update.Where(updateValues.IsValid).ForEach(updateValue=>UpdateModel(model.Single(e=>e.Id==updateValue.Id)),null,null,excludeProperties:new[]{“偏差”}); //应用更改 Db.SaveChanges(); } 其他的 { 抛出新异常(“模型无效”); } 返回GridViewPartial(); } 即使我排除了计算的属性偏差,我也会得到以下异常:

System.Data.dll中发生了类型为“System.Data.SqlClient.SqlException”的第一次意外异常 其他信息:列名“偏差”无效

知道我做错了什么吗


提前谢谢。

请不要介意:很遗憾,你的方法不适合我的情况。我使用以下代码从sql server获取数据:
return Db.Database.SqlQuery(“EXEC GetReportings”).ToList()。如果我对偏差属性使用数据注释[NotMapped],那么在从存储过程读取数据时它将不再被映射。如果您是从DB读取数据,那么它就不会被计算?据我所知,计算属性应该在应用程序中的某个地方计算。那么您可以添加另一个属性吗,使用NotMapped标记它,并使用它根据来自DB的列计算偏差?如果我添加属性NotMapped,它在更新记录时工作,但在另一方面,它在从数据库读取字段时不映射字段。只需使用NotMapped属性:不幸的是,您的方法不适合我的情况。我使用以下代码从sql server获取数据:
return Db.Database.SqlQuery(“EXEC GetReportings”).ToList()。如果我对偏差属性使用数据注释[NotMapped],那么在从存储过程读取数据时它将不再被映射。如果您是从DB读取数据,那么它就不会被计算?据我所知,计算属性应该在应用程序中的某个地方计算。那么您可以添加另一个属性吗,用NotMapped标记它,并使用它根据来自DB的列计算偏差?如果我添加属性NotMapped,它在更新记录时工作,但在另一边,它在从数据库读取字段时不映射字段。