EF Core:如何计算现有行的添加列的值
EF Core: How to calculate values for added column for existing rows
我的实体中有一个 NotMapped
属性 CountUsed
。
出于某种原因(我使用了一些 UI 控件)我将其切换为正常的 属性,现在我在添加相关子实体时更新 CountUsed
的值到此实体(目标<-条目)。
这么好,但是对于我数据库中的旧行(其中的值之前是动态计算的,而不是从数据库中获取的 table),我现在在这些列中没有任何值。只有当我添加或删除相关条目时,它才会计算出一个列值。
所以我的想法是,在迁移 Up()
方法中添加一些代码,以计算现有行的列值。
我找到了一个UpdateData()
方法:
migrationBuilder.UpdateData(
table: "Targets",
keyColumn: target_id,
keyValue: rowId,
column: "CountUsed",
value: calculatedCountUsedValue);
但是查看参数,我的情况看起来不合适table,或者我是否必须先获取我的项目,遍历它们并为每个现有行调用此方法?
也许有其他更好的方法?
我现在可以使用 Sql() 方法更新现有行来解决它:
migrationBuilder.Sql("UPDATE Targets SET CountUsed = (SELECT COUNT (*) FROM Entries WHERE Entries.TargetId = Targets.TargetId)");
我的实体中有一个 NotMapped
属性 CountUsed
。
出于某种原因(我使用了一些 UI 控件)我将其切换为正常的 属性,现在我在添加相关子实体时更新 CountUsed
的值到此实体(目标<-条目)。
这么好,但是对于我数据库中的旧行(其中的值之前是动态计算的,而不是从数据库中获取的 table),我现在在这些列中没有任何值。只有当我添加或删除相关条目时,它才会计算出一个列值。
所以我的想法是,在迁移 Up()
方法中添加一些代码,以计算现有行的列值。
我找到了一个UpdateData()
方法:
migrationBuilder.UpdateData(
table: "Targets",
keyColumn: target_id,
keyValue: rowId,
column: "CountUsed",
value: calculatedCountUsedValue);
但是查看参数,我的情况看起来不合适table,或者我是否必须先获取我的项目,遍历它们并为每个现有行调用此方法?
也许有其他更好的方法?
我现在可以使用 Sql() 方法更新现有行来解决它:
migrationBuilder.Sql("UPDATE Targets SET CountUsed = (SELECT COUNT (*) FROM Entries WHERE Entries.TargetId = Targets.TargetId)");