C# 当我通过EF向SQL添加值时,ID始终为0 我有一个连接到实体框架的MVC项目(db优先) 我有一个类User,每当我尝试将它添加到数据库中时,它的IDis0 我试图通过向类中添加属性ID来解决这个问题,但也没有取得多大进展
据我所知,每次我添加一些东西时,SQL都应该自动生成Id,但这并没有发生。我做错了什么 sql c#C# 当我通过EF向SQL添加值时,ID始终为0 我有一个连接到实体框架的MVC项目(db优先) 我有一个类User,每当我尝试将它添加到数据库中时,它的IDis0 我试图通过向类中添加属性ID来解决这个问题,但也没有取得多大进展,c#,entity-framework,C#,Entity Framework,据我所知,每次我添加一些东西时,SQL都应该自动生成Id,但这并没有发生。我做错了什么 sql c# 您需要将其声明为标识列,如下所示: create table Users ( ID bigint IDENTITY(1,1) not null primary key, FirstName nvarchar(50) not null, LastName nvarchar(50) not null, BirthDate smalldatetime not null, Email varchar(5
您需要将其声明为标识列,如下所示:
create table Users (
ID bigint IDENTITY(1,1) not null primary key,
FirstName nvarchar(50) not null,
LastName nvarchar(50) not null,
BirthDate smalldatetime not null,
Email varchar(50) not null,
UserName nvarchar(50) not null,
Password nvarchar(50) not null
)
您需要将其声明为标识列,如下所示:
create table Users (
ID bigint IDENTITY(1,1) not null primary key,
FirstName nvarchar(50) not null,
LastName nvarchar(50) not null,
BirthDate smalldatetime not null,
Email varchar(50) not null,
UserName nvarchar(50) not null,
Password nvarchar(50) not null
)
您需要执行以下操作:
ID
标记为,这将确保Sql Server在每个记录中设置该列的值DatabaseGeneratedOption.Identity
标记该属性,以便在插入完成后不会将值发送到数据库,并且Sql Server添加的值将被读回并应用于模型。您可以使用属性或流畅的表示法来实现这一点CREATE TABLE Users (
ID bigint IDENTITY(1,1) NOT NULL PRIMARY KEY,
FirstName nvarchar(50) not null,
LastName nvarchar(50) not null,
BirthDate smalldatetime not null,
Email varchar(50) not null,
UserName nvarchar(50) not null,
Password nvarchar(50) not null
)
EF模型:
public class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime BirthDate { get; set; }
public string Email { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
旁注
int
作为Id列,除非您正在设计一个全世界人口都将使用的系统*您需要执行以下操作:
ID
标记为,这将确保Sql Server在每个记录中设置该列的值DatabaseGeneratedOption.Identity
标记该属性,以便在插入完成后不会将值发送到数据库,并且Sql Server添加的值将被读回并应用于模型。您可以使用属性或流畅的表示法来实现这一点CREATE TABLE Users (
ID bigint IDENTITY(1,1) NOT NULL PRIMARY KEY,
FirstName nvarchar(50) not null,
LastName nvarchar(50) not null,
BirthDate smalldatetime not null,
Email varchar(50) not null,
UserName nvarchar(50) not null,
Password nvarchar(50) not null
)
EF模型:
public class User
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime BirthDate { get; set; }
public string Email { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
旁注
int
作为Id列,除非您正在设计一个全世界人口都将使用的系统*您正在使用哪个版本的
Sql Server
?您是否在表列中设置了标识(1,1)?是否在sql server中将Id
列配置为标识列?您的AddNewUser
方法中是否存在键入错误?您似乎在添加用户
,而不是用户
,而且,新用户
在任何地方都没有定义。您一定期望很多用户将Id设置为bigint
@RandRandom,允许地球上的每一粒沙子都可以开立帐户-不得不佩服雄心壮志。Sql Server
您使用的是什么版本?您是否在表列中设置了标识(1,1)?是否在sql server中将Id
列配置为标识列?您的AddNewUser
方法中是否存在键入错误?你似乎在添加用户
,而不是用户
,而且,新用户
在任何地方都没有定义。你一定期待着很多用户将Id设置为bigint
@RandRandom,让地球上的每一粒沙子都可以开户-开始欣赏雄心壮志..工作完美!谢谢!工作完美!谢谢!