gpt4 book ai didi

C# 添加新子项时更新父对象

转载 作者:行者123 更新时间:2023-11-30 22:59:20 25 4
gpt4 key购买 nike

不是我的场景,但我构建了这个示例以了解如何解决我的问题。使用 Entity Framework ,我有以下模型;

namespace ClassTesting.Models
{
using System;
using System.Collections.Generic;

public partial class Player
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Player()
{
this.Deposit_Transactions = new HashSet<Deposit_Transactions>();
}

public long id { get; set; }
public string player_name { get; set; }
public decimal player_balance { get; set; }

[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Deposit_Transactions> Deposit_Transactions { get; set; }
}
}

namespace ClassTesting.Models
{
using System;
using System.Collections.Generic;

public partial class Deposit_Transactions
{
public long id { get; set; }
public System.DateTime transaction_date { get; set; }
public decimal transaction_amount { get; set; }
public long fk_player_id { get; set; }

public virtual Player Player { get; set; }
}
}

所以一个玩家可以有很多 Deposit_Transactions。

我想做的是每当发布新的 Deposit_Transaction 时,更新玩家的 player_balance 属性。我可以做到,但我的解决方案真的很笨拙,涉及获取玩家记录并在存款完成后进行更新。我想知道执行此操作的“最佳实践”方法是什么?

最佳答案

假设 player_balance 是该玩家的 Deposit_Transactions 的某种聚合,我强烈建议您从相应的数据库表中删除 player_balance。目前,您的模型是非规范化的,将相同的概念信息存储在多个位置,从而使其不同步。

这是一个更大的问题,并不局限于您的 EF 模型,它增加了整个系统出现错误的可能性。

您可以从表中删除该列并将 player_balance 更改为只读的计算属性,以保持其便利性。

public partial class Player
{
public decimal player_balance =>
Deposit_Transactions.Sum(transaction => transaction.transaction_amount);
}

关于C# 添加新子项时更新父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52276007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com