使用EF Core無法將Int轉換為Decimal?

c# entity-framework entity-framework-core mysql

我試圖用MySQL數據庫中的Entity Framework Core向ASP.Net中提取大量整數(22位以上)的問題。

EF Core不支持BigInteger以及我收到的建議,而不是使用decimal 。但是,在我的實體上使用decimal類型時,我總是在嘗試從數據庫中選擇時收到以下異常:

System.InvalidCastException:無法將類型為'System.Int32'的對象強制轉換為'System.Decimal'

在數據庫中,列是INT(25) ,在我的模型中,類型是decimal ,這是一個示例模型:

[Table("alliance_reputation_rankings")]
public class AllianceReputationRank
{
    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    [Column("date")]
    public DateTime Date { get; set; }

    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    [Column("world")]
    public int World { get; set; }

    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    [Column("alliance")]
    public string Alliance { get; set; }

    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    [Column("rank")]
    public int Rank { get; set; }

    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    [Column("reputation")]
    public decimal Reputation { get; set; }

    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    [Key]
    [Column("entry_id")]
    public int EntryId { get; set; }
}

我無法使用EF Core選擇Reputation屬性。即使我嘗試在屬性之前使用(decimal)來強制轉換它:

選擇的粗略示例:

_context.AllianceReputationRankings
   .Where(p => p.Date == rank.Date && p.Alliance== rank.Alliance && p.World == rank.World)
                                   .Select(pl =>  new AllianceReputationRank
                                   {
                                       Date = pl.Date,
                                       World = pl.World,
                                       Alliance = pl.Alliance,
                                       Reputation = (decimal)pl.Reputation
                                   }
                                   ).FirstOrDefault();

如何在模型中使用小數來從數據庫中引入大量的int?如果我不能使用小數,如何在EF Core中使用大數字?

熱門答案

我做的似乎工作是乘以1m

context.AllianceReputationRankings
   .Where(p => p.Date == rank.Date && p.Alliance== rank.Alliance && p.World == rank.World)
        .Select(pl =>  new AllianceReputationRank
        {
            Date = pl.Date,
            World = pl.World,
            Alliance = pl.Alliance,
            Reputation = pl.Reputation * 1m
        }
    ).FirstOrDefault();

這似乎允許十進制操作,而不是將性能發揮到底。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow