Entityframework Core型 'System.Int32'のオブジェクトを型 'System.Int64'にキャストできません

c# entity-framework-core sql-server

質問

DBの最初のエンティティフレームワークのコアは、SaveChanges();このコードは、Entity Frameworkではうまく動作しますが、Entity Framework Coreではうまく動作しません。

例外メッセージ:タイプ 'System.Int32'のオブジェクトをタイプして 'System.Int64'にキャストできません。

CsProduct csProduct = new CsProduct()
{
    CheapestPrice = 1,
    LastPrice = 1,
    LastUpdateDate = DateTime.Now,
    ProductName = "123",
    Quantity = 1,
    UploadDate = DateTime.Now
};
CSContext ctx = new CSContext();
ctx.Entry(csProduct).State = EntityState.Added; 
// ctx.CsProduct.Add(csProduct); This does not work neither
csProduct.ProductNo = 0; // Still throws exception without this line
ctx.SaveChanges();  

------------------------------------------------------------------ 
CsProduct.cs
public partial class CsProduct
{
    public CsProduct()
    {
    }

    public long ProductNo { get; set; }
    public string ProductName { get; set; }
    public decimal CheapestPrice { get; set; }
    public decimal LastPrice { get; set; }
    public int Quantity { get; set; }
    public DateTime UploadDate { get; set; }
    public DateTime LastUpdateDate { get; set; }
    public string Comment { get; set; }
}
------------------------------------------------------------------------------
DDL
CREATE TABLE CS_Product(
    productNo               bigint              IDENTITY(1,1)   NOT NULL,
    productName             nvarchar(256)                   NOT NULL,
    cheapestPrice               decimal(14,2)                   NOT NULL,
    lastPrice                   decimal(14,2)                   NOT NULL,
    quantity                    int                         NOT NULL,
    uploadDate              datetime                        NOT NULL,
    lastUpdateDate          datetime                        NOT NULL,
    comment                 nvarchar(450)                           ,
    CONSTRAINT PK_CS_Product PRIMARY KEY (productNo),
);

受け入れられた回答

それは私の間違いでした..最初にテーブルを作成したとき、productNoはbigintだったので、そのテーブルに基づいてモデルを作成しました。その後、どうにかして(それは私でなければなりません...)productNoはintに変更されました。それは、製品を変更した後でうまく動作しています。


人気のある回答

このラインの背後には理由がありますか?

csProduct.ProductNo = 0;

フレームワークは保存後にキーを割り当てます。

その行を削除してください。IDが必要な場合は.SaveChanges();エンティティのID値を確認します。

csRepository.CSContext.SaveChanges();
var NewID = csProduct.ProductNo;


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ