EF尝试创建新条目而不是关系

时间:2018-06-26 22:07:57

标签: c# entity-framework-core

我有一个User模型和一个UserRole模型。在数据库中,UserRole是枚举数(如下所示)。初始化数据库时,Users表具有一列UserRoleId,因此我假设Entity Framework正确建立了关系。

但是,当我尝试添加用户时,出现一个错误,即EF试图在UserRole表中创建一个新条目。

我不希望它在UserRole表中创建新条目,我希望将一个数字插入到User表的UserRoleId列中,以引用{ {1}}表。

错误:

  

Microsoft.EntityFrameworkCore.Database.Command:错误:执行DbCommand失败(2ms)[Parameters = [@ p0 ='?' (DbType = Int32),@ p1 ='?' (大小= 4000)],CommandType ='文本',CommandTimeout = '30']
  设置NOCOUNT ON;
  插入[UserRoles]([Id],[Role])
  值(@ p0,@ p1);

     

System.Data.SqlClient.SqlException(0x80131904):当IDENTITY_INSERT设置为OFF时,无法在表'UserRoles'中为身份列插入显式值。

数据库中的UserRoles表:

UserRole

型号:

ID  |  Role
==============
1   |  Viewer
2   |  Owner
3   |  Admin

1 个答案:

答案 0 :(得分:0)

正如Camilo Terevinto指出的那样,有必要将UserRoleId显式添加到User模型。之后,Add-MigrationUpdate-Database,并更改前端,控制器和DTO,以便传递UserRoleId而不是UserRole对象。

public class User
{
    public int Id { get; set; }
    public string Username { get; set; }
    public byte[] PasswordHash { get; set; }
    public byte[] PasswordSalt { get; set; }

    public int UserRoleId { get; set; } //<--- THE IMPORTANT PARTS
    public UserRole UserRole { get; set; }  //<--- THE IMPORTANT PARTS
    ...
}