EF пытается создать новую запись вместо отношения - PullRequest
0 голосов
/ 27 июня 2018

У меня есть модель User и модель UserRole. В базе данных UserRole является перечислителем (визуализируется ниже). Когда я инициализировал базу данных, в таблице Users был столбец UserRoleId, поэтому я предположил, что Entity Framework правильно установил связь.

Однако, когда я пытаюсь добавить пользователя, я получаю сообщение об ошибке, что EF пытается создать новую запись в таблице UserRole.

Я не хочу, чтобы он создавал новую запись в таблице UserRole, я хочу, чтобы число вставлялось в столбец UserRoleId таблицы User, который ссылается на роль в таблице UserRole.

Ошибка:

Microsoft.EntityFrameworkCore.Database.Command: Ошибка: не удалось выполнить команду DbCommand (2 мс) [Parameters = [@ p0 = '?' (DbType = Int32), @ p1 = '?' (Размер = 4000)], CommandType = 'Text', CommandTimeout = '30 ']
SET NOCOUNT ON;
INSERT INTO [UserRoles] ([Id], [Role])
ЗНАЧЕНИЯ (@ p0, @ p1);

System.Data.SqlClient.SqlException (0x80131904): Невозможно вставить явное значение для столбца идентификаторов в таблице «UserRoles», если для IDENTITY_INSERT установлено значение OFF.

Таблица пользовательских ролей в БД:

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

Модели:

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

    public UserRole UserRole { get; set; }  //<--- THE IMPORTANT PART
    ...
}

public class UserRole
{
    public int Id { get; set; }
    public string Role { get; set; }
}

1 Ответ

0 голосов
/ 27 июня 2018

Как отметил Камило Теревинто, необходимо явно добавить UserRoleId в модель User. После этого Add-Migration и Update-Database и измените внешний интерфейс, контроллер и DTO так, чтобы вместо объекта UserRole передавался UserRoleId.

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
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...