【发布时间】:2020-11-22 16:31:18
【问题描述】:
我有一个在我的数据库中存储股票的表单,当我输入一个股票时,它会保留信息,当我尝试添加另一只股票时,我得到一个异常“无法为表中的标识列插入显式值”
在我的模型中,我声明了 STOCKID 属性,在我的 T-SQL 中,它设置为 IDENTITY(1,1)。
在我的模型中,我添加了[DatabaseGenerated(DatabaseGeneratedOption.Identity)],但这并没有帮助
有什么建议吗?
型号
public class Stock
{
#region Day 1's
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
T-SQL
CREATE TABLE [dbo].[LowFloatStocks]
(
[Id] INT IDENTITY (1, 1) NOT NULL,
[Date] DATE NOT NULL,
[Ticker] NVARCHAR (4) NOT NULL,
[PreviousClose] DECIMAL (4, 2) DEFAULT ((4.00)) NOT NULL,
[PM_OpeningPrice] DECIMAL (18, 2) DEFAULT ((3)) NOT NULL,
[OpeningPrice] DECIMAL (18, 2) NOT NULL,
[PMFadePercent] AS (ROUND(([OpeningPrice] - [PM_OpeningPrice]) / [PM_OpeningPrice], (4)) * (100.0)) PERSISTED NOT NULL,
[GainPercent] AS (ROUND(([High] - [OpeningPrice]) / [OpeningPrice], (4)) * (100.0)) PERSISTED NOT NULL,
[GapPercent] AS (ROUND(([OpeningPrice] - [PreviousClose]) / [PreviousClose], (4)) * (100.0)) PERSISTED NOT NULL,
[Spike] DECIMAL (18, 2) NOT NULL,
[1stSpike%] AS (ROUND(([Spike] - [OpeningPrice]) / [OpeningPrice], (4)) * (100.0)) PERSISTED NOT NULL,
[High] DECIMAL (18, 2) NOT NULL,
[HighPercent] AS (ROUND(([High] - [PreviousClose]) / [PreviousClose], (4)) * (100.0)) PERSISTED NOT NULL,
[Low] DECIMAL (18, 2) NOT NULL,
[LowPercent] AS (ROUND(([Low] - [PreviousClose]) / [PreviousClose], (4)) * (100.0)) PERSISTED NOT NULL,
[Close] DECIMAL (18, 2) DEFAULT ((4)) NOT NULL,
[ClosePercent] AS (round(([Close]-[PreviousClose])/[PreviousClose],(4))*(100.0)) PERSISTED NOT NULL,
[ClosevHigh] AS (round(([High]-[Close])/[Close], (4))*(100)) PERSISTED NOT NULL,
[ClosevOpen] AS (round(([OpeningPrice]-[Close])/[OpeningPrice],(4))*(100.0)) PERSISTED NOT NULL,
[CloseLessEqualToOpen] AS (CONVERT([nchar](3),case when [Close]<=[OpeningPrice] then 'Yes' else 'No' end)) PERSISTED NOT NULL,
[CloseRed] AS (CONVERT([nchar](3),case when [Close]<[OpeningPrice] then 'Yes' else 'No' end)) PERSISTED NOT NULL,
[Catalyst] NVARCHAR (50) NOT NULL,
[Float] DECIMAL (18, 3) NOT NULL,
[Dilution] NCHAR (3) NOT NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);
添加库存方法
public ICommand AddCommand => _addCommand ?? (_addCommand = new RelayCommand(param => this.AddStock()));
#endregion
#region Actions
private void AddStock()
{
using (var stocks = new AppDbContext())
{
stocks.LowFloatStocks.Add(stock);
stocks.SaveChanges();
Stocks = stocks.LowFloatStocks.ToList();
Clear();
}
}
【问题讨论】:
-
您是否添加了迁移并更新了数据库?
-
先是数据库?我必须使用迁移吗
-
您是否也在使用 fluent API 进行配置?你能显示插入数据库的代码吗
-
stock.Id的值是多少 -
是的,所以在保存之前尝试将其显式设置为 0。试一试
标签: c# visual-studio entity-framework tsql