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。將產品更改為bigint後,工作正常


熱門答案

這條線背後有原因嗎?

csProduct.ProductNo = 0;

框架將在保存後分配密鑰。

只需刪除該行,如果你想要ID,那麼.SaveChanges();然後檢查實體的ID值。

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


Related

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