【发布时间】:2016-07-26 01:08:26
【问题描述】:
这有点复杂……
我有一个 SQL 表TABLE_A。该表有 3 列 Qty 、 Price 和 TotalPrice。为确保一致性,TotalPrice 是数据库级别的计算字段Qty * Ptice = TotalPrice。
在WinForms 接口方面,我使用Generic collections 和List<Table_A> 一样在将集合提交到数据库之前对其进行准备。我在提交之前将List<Table_A> 输入DataGridView 以供用户审核。现在的问题是计算字段。要在提交之前显示计算字段的值,我必须在接口端将值分配给TotalPrice。插入新记录时效果很好,因为值被忽略并且数据库计算它的值。但是,当我将表值加载到List<Table_A. 时,更改记录的TotalPrice(通过更改Qty 或Price)并尝试更新数据库我得到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