如何解决如何在实体框架中创建新记录而不在其参数中指定主键?
我的项目中有一个网页,其中有人注册成为用户。然后我的控制器从前端获取一个 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 举报,一经查实,本站将立刻删除。