Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当我通过EF向SQL添加值时,ID始终为0 我有一个连接到实体框架的MVC项目(db优先) 我有一个类User,每当我尝试将它添加到数据库中时,它的IDis0 我试图通过向类中添加属性ID来解决这个问题,但也没有取得多大进展_C#_Entity Framework - Fatal编程技术网

C# 当我通过EF向SQL添加值时,ID始终为0 我有一个连接到实体框架的MVC项目(db优先) 我有一个类User,每当我尝试将它添加到数据库中时,它的IDis0 我试图通过向类中添加属性ID来解决这个问题,但也没有取得多大进展

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

据我所知,每次我添加一些东西时,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(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在每个记录中设置该列的值
  • 确保在模型的代码中也定义了ID,并将其标记为主键。实体框架(EF)需要有一个主键,以便能够区分不同的记录。当您开始使用EF对数据库执行查询时,这一点很重要
  • 使用
    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列,除非您正在设计一个全世界人口都将使用的系统*
  • 很难从您的代码中分辨出来,但您可能将用户选择的密码持久化为纯文本。如果是这种情况,您需要更改此代码,以便存储所选密码的安全哈希(使用pbkdf2或bcrypt或scrypt)。永远不要将用户的密码存储为纯文本,甚至不要使用可逆加密算法,这些都被认为是不安全的

  • 您需要执行以下操作:

  • 将表中的主键列
    ID
    标记为,这将确保Sql Server在每个记录中设置该列的值
  • 确保在模型的代码中也定义了ID,并将其标记为主键。实体框架(EF)需要有一个主键,以便能够区分不同的记录。当您开始使用EF对数据库执行查询时,这一点很重要
  • 使用
    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列,除非您正在设计一个全世界人口都将使用的系统*
  • 很难从您的代码中分辨出来,但您可能将用户选择的密码持久化为纯文本。如果是这种情况,您需要更改此代码,以便存储所选密码的安全哈希(使用pbkdf2或bcrypt或scrypt)。永远不要将用户的密码存储为纯文本,甚至不要使用可逆加密算法,这些都被认为是不安全的

  • 您正在使用哪个版本的
    Sql Server
    ?您是否在表列中设置了标识(1,1)?是否在sql server中将
    Id
    列配置为标识列?您的
    AddNewUser
    方法中是否存在键入错误?您似乎在添加
    用户
    ,而不是
    用户
    ,而且,
    新用户
    在任何地方都没有定义。您一定期望很多用户将Id设置为
    bigint
    @RandRandom,允许地球上的每一粒沙子都可以开立帐户-不得不佩服雄心壮志。
    Sql Server
    您使用的是什么版本?您是否在表列中设置了标识(1,1)?是否在sql server中将
    Id
    列配置为标识列?您的
    AddNewUser
    方法中是否存在键入错误?你似乎在添加
    用户
    ,而不是
    用户
    ,而且,
    新用户
    在任何地方都没有定义。你一定期待着很多用户将Id设置为
    bigint
    @RandRandom,让地球上的每一粒沙子都可以开户-开始欣赏雄心壮志..工作完美!谢谢!工作完美!谢谢!