微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在实体框架中创建新记录而不在其参数中指定主键?

如何解决如何在实体框架中创建新记录而不在其参数中指定主键?

我的项目中有一个网页,其中有人注册成为用户。然后我的控制器从前端获取一个 api 调用,其中包含从注册中输入的帖子值。

我正在尝试使用该信息在我的数据库中创建一个新记录,有没有办法在不指定参数中的主键的情况下创建对象?我显然没有从用户那里获取 id,所以我只想创建没有 id 的对象。

控制器

// POST api/values
[HttpPost]
public void Post(string username,string password,string email,string role)
{
    Users user = new Users(username,password,email,role);
    _repository.createuser(user);
    _repository.SaveChanges();
}

型号:

using System.ComponentModel.DataAnnotations;

namespace IssueTracker.Models
{
    public class Users
    {
        [Key]
        public int id { get; set; }

        [required]
        public string username { get; set; }

        [required]
        public string password { get; set; }

        [required]
        public string email { get; set; }

        [required]
        public string role { get; set; }

        public Users(int id,string username,string role)
        {
            this.id = id;
            this.username = username;
            this.password = password;
            this.email = email;
            this.role = role;
        }

        public Users()
        {
        }
    }
}

解决方法

如果您在 SQL Server 中的表被定义为具有 Id INT IDENTITY 列 - 那么是的,SQL Server 将自动处理创建新的 PK。您需要向模型中的 Id 列添加另一个属性:

public class Users
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int id { get; set; }

    [Required]
    public string username { get; set; }

    // other properties here .....
}

这告诉 EF SQL Server 数据库将为 Id 创建一个新的唯一值,该值将用作 User 对象的主键。

,

没有PK是不明智的,但您可以使用[Keyless]属性并删除Id字段。

更多信息: https://docs.microsoft.com/en-us/ef/core/modeling/keyless-entity-types?tabs=data-annotations

如果您想为 Id 自动生成值以便您不需要指定它,请检查: https://docs.microsoft.com/en-us/ef/core/modeling/generated-properties?tabs=data-annotations

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。