gpt4 book ai didi

entity-framework - 如何使 c# 十进制匹配 SQL 十进制以进行 EF 更改跟踪?

转载 作者:行者123 更新时间:2023-12-04 18:57:33 29 4
gpt4 key购买 nike

为了避免接触 EF 中的不变记录,原始和当前实体值匹配很重要。我看到小数的问题,其中 EF 实体具有 SQL 表示形式,并且正在与 c# 十进制进行比较。

这是检测到更改的实体的调试输出。这很清楚地显示了问题。即使实体和源数据都是十进制类型,即使它们相等,值也被认为是不同的。

enter image description here

使用c#十进制时如何确保原始值和当前值匹配?

也许有一种方法可以在更新之前将c#十进制转换为实体(SQL)十进制?

另一个例子

enter image description here

我希望截断忽略传入精度高于 SQL 比例的事实

最佳答案

您可以实现一个代理属性来处理从代码精度到数据库精度的转换:

public class MoneyClass
{
[Column("Money")]
public decimal MyDbValue { get; set; } // You existing db-property

[NotMapped]
public decimal MyCodeValue // some property to access within you code
{
get
{
return this.MyDbValue;
}
set
{
decimal newDbValue = decimal.Round(value, 2);
if (this.MyDbValue != newDbValue)
{
Console.WriteLine("Change! Old: {0}, New: {1}, Input: {2}", this.MyDbValue, newDbValue, value);
this.MyDbValue = newDbValue;
}
}
}
}

static void Main(params string[] args)
{
MoneyClass dbObj = new MoneyClass()
{
MyCodeValue = 123.456M
};

Console.WriteLine(dbObj.MyDbValue);
dbObj.MyCodeValue = 123.457M; // won't change anything
Console.WriteLine(dbObj.MyDbValue);
dbObj.MyCodeValue = 123.454M; // will change because of 3rd decimal value 4
Console.WriteLine(dbObj.MyDbValue);
dbObj.MyCodeValue = 123.46M; // will change
Console.WriteLine(dbObj.MyDbValue);
}

关于entity-framework - 如何使 c# 十进制匹配 SQL 十进制以进行 EF 更改跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48778571/

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