EFコアでIntを10進数にキャストすることはできませんか?

c# entity-framework entity-framework-core mysql

質問

私は、MySQLデータベースからEntity Framework Coreを使用してASP.Netに大規模なint(22桁以上)を引き込む問題を解決しようとしています。

EF CoreはBigIntegerをサポートしておらず、代わりにdecimalを使用するための提案を受けています。しかし、私のエンティティでdecimal型を使用する場合、DBから選択しようとすると、常に次の例外が発生します。

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コアを使用して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();

私のモデルで小数点を使ってデータベースから大量のデータを取り込むにはどうすればよいですか?小数点以下の桁数を使用できない場合は、EFコアでどのように大きな数値を使用できますか?

人気のある回答

私が何をしたかは、 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
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ