【问题标题】:Preventing app's attempt to alter calculated field value防止应用程序尝试更改计算的字段值
【发布时间】:2016-07-26 01:08:26
【问题描述】:

这有点复杂…… 我有一个 SQL 表TABLE_A。该表有 3 列 QtyPriceTotalPrice。为确保一致性,TotalPrice 是数据库级别的计算字段Qty * Ptice = TotalPrice。 在WinForms 接口方面,我使用Generic collectionsList<Table_A> 一样在将集合提交到数据库之前对其进行准备。我在提交之前将List<Table_A> 输入DataGridView 以供用户审核。现在的问题是计算字段。要在提交之前显示计算字段的值,我必须在接口端将值分配给TotalPrice。插入新记录时效果很好,因为值被忽略并且数据库计算它的值。但是,当我将表值加载到List<Table_A. 时,更改记录的TotalPrice(通过更改QtyPrice)并尝试更新数据库我得到A member that is computed or generated by the database cannot be changed. 异常。我该如何解决它,以便应用程序不会尝试向计算字段提交更改? 我使用 LINQ 和 Entity Framework 对象连接到 SQL 数据库。

【问题讨论】:

  • 可能有一种更简单的方法,但是您可以添加一个代替触发器(假设是 SQL Server)并在数据库端进行正确的更新。
  • 在您的 C# 类中更改 TotalPrice 以使 DataAnnotation NotMapped。然后将您的 TotalPrice 更改为只有一个返回 Qty * Price 的 getter。

标签: c# sql winforms linq entity


【解决方案1】:

显然我不得不睡在上面。我回到了使用DataGridViewCellFormatting 事件的最初概念并在那里应用数学。删除了更改界面中计算字段的代码,它按预期工作。现在,在插入或更新之前,我可以在审查中获得完整的数据表示,而无需调用数据库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多