2017-02-06 70 views
1

DB第一個實體框架核心在SaveChanges(); 此代碼適用於實體框架,但不適用於實體框架核心。Entityframework Core無法將類型爲'System.Int32'的對象強制類型爲'System.Int64'

異常消息:無法將類型爲「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), 
); 
+0

是否有任何流利的映射代碼或錯誤地將類型設置爲'Int32'的遷移代碼? – Igor

+0

EF Core版本:1.1.0,它應該正確映射主鍵。因爲它是由實體框架使用Scaffold-DbContext生成的 –

回答

1

這是我的錯.. 當我第一次創建表,productNo是BIGINT和我創建基於該表的模型。 之後,以某種方式(它一定是我...)productNo更改爲int。 更改productNo後工作正常沒有回bigint

0

是否有這條線

csProduct.ProductNo = 0; 

框架將分配鍵保存後,後面的原因。

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

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

只是將該行留出。 –

+0

我已經嘗試過了,但是我收到了同樣的異常。 –

+0

僅供參考,該代碼適用於實體框架,但不適用於實體框架核心... –

相關問題