DB第一实体框架核心在SaveChanges()时抛出此异常;这段代码可以很好地使用实体框架,但不能使用实体框架核心。
异常消息:无法强制转换类型为"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创建表CS_Product(productNo bigint IDENTITY(1,1)NOT NULL,productName nvarchar(256)NOT NULL,cheapestPrice十进制(14,2)不为空,lastPrice decimal(14,2)NOT NULL,quantity int NOT NULL,uploadDate日期时间不为空,lastUpdateDate日期时间不为空,评论nvarchar(450),CONSTRAINT PK_CS_产品主键(productNo),)
这是我的错误。。当我第一次创建表时,productNo是bigint,我基于该表创建了模型。之后不知怎么的(一定是我…)productNo变成了int。在将productNo改回bigint 后,它运行得很好
这条线背后有原因吗
csProduct.ProductNo = 0;
保存后,框架将分配密钥。
只要去掉那一行,如果你想要ID,然后再删除。SaveChanges();然后检查实体的ID值。
csRepository.CSContext.SaveChanges();
var NewID = csProduct.ProductNo;