C# SQL Server标识赢得';t带输入的自动增量
我正在尝试将数据发送到SQL Server数据库,该数据库具有C# SQL Server标识赢得';t带输入的自动增量,c#,sql-server,asp.net-mvc,C#,Sql Server,Asp.net Mvc,我正在尝试将数据发送到SQL Server数据库,该数据库具有ID主键设置,并具有要递增的Identity 从我到目前为止所读到的内容来看,大多数人都有在他们的命令代码中添加Id属性的问题,这是不必要的。我的没有,所以我想这可以工作,但我仍然收到一条错误消息,说明DB表不允许ID为null。因为我使用的是Identity,SQL不应该自动填充该列吗 我已经了解到,在模型中,您必须使用[DatabaseGenerated(DatabaseGeneratedOption.Identity)],但它仍
ID
主键设置,并具有要递增的Identity
从我到目前为止所读到的内容来看,大多数人都有在他们的命令代码中添加Id
属性的问题,这是不必要的。我的没有,所以我想这可以工作,但我仍然收到一条错误消息,说明DB表不允许ID为null。因为我使用的是Identity,SQL不应该自动填充该列吗
我已经了解到,在模型中,您必须使用[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
,但它仍然没有运行
模型
达尔
桌子
服务器管理器
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Event]
(
[Id] [int] NOT NULL,
[EventType] [varchar](50) NOT NULL,
[Title] [varchar](50) NOT NULL,
[Date] [nchar](10) NOT NULL,
[Time] [varchar](20) NOT NULL,
[Location] [varchar](50) NOT NULL,
[Company] [varchar](50) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
作为旁注:您的
Time
列不是Time
类型是否有原因?DatabaseGenerated(DatabaseGeneratedOption.Identity)
仅适用于实体框架数据库集。由于您使用的是直接ADO,因此您装饰模型的方式与此无关。这并不能解释你的问题,但它应该缩小你的范围。好了,就这样。您的表实际上没有标识列。您应该注意这一行:[Id][int]NOT NULL,
这表明您没有将identity
属性应用于Id
列。此外,日期
列的类型是nchar(10)
,而不是日期
。你也要解决这个问题。
internal bool AddEvent(EventModel eventModel)
{
// Connect to the database
string connStr = configuration.GetConnectionString("ConnString") ;
using SqlConnection conn = new SqlConnection(connStr);
conn.Open();
// Command
string query = "INSERT INTO [dbo].[Event] ([EventType], [Title], [Date], [Location], [Company])" +
" VALUES (@EventType, @Title, @Date, @Location, @Company)";
SqlCommand cmd = new SqlCommand(query, conn);
cmd.Parameters.AddWithValue("@EventType", eventModel.EventType);
cmd.Parameters.AddWithValue("@Title", eventModel.Title);
cmd.Parameters.AddWithValue("@Date", eventModel.Date);
cmd.Parameters.AddWithValue("@Location", eventModel.Location);
cmd.Parameters.AddWithValue("@Company", eventModel.Company);
// Query DB
SqlDataReader reader = cmd.ExecuteReader();
reader.Read();
// Close Connection
conn.Close();
return true;
}
CREATE TABLE [dbo].[Event]
(
[Id] INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
[EventType] VARCHAR(50) NOT NULL,
[Title] VARCHAR(50) NOT NULL,
[Date] DATE NOT NULL,
[Time] VARCHAR(20) NOT NULL,
[Location] VARCHAR(50) NOT NULL,
[Company] VARCHAR(50) NULL,
);
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Event]
(
[Id] [int] NOT NULL,
[EventType] [varchar](50) NOT NULL,
[Title] [varchar](50) NOT NULL,
[Date] [nchar](10) NOT NULL,
[Time] [varchar](20) NOT NULL,
[Location] [varchar](50) NOT NULL,
[Company] [varchar](50) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]