Проблема со вставкой новой строки с EF в 1 ... 0,1 отношение - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть две таблицы: Person и Employee, и я только что создал 1 .. 0,1 отношения между ними соответственно. PersonId в таблице Person имеет определенную идентификацию 1. EmployeeId в таблице Employee не имеет идентифицированной идентификации.

enter image description here

Когда я вставляю новую строку в таблицу Person в SQL Studio, все работает нормально, однако, когда я пытаюсь вставить данные в Entity Framework, я получаю сообщение об ошибке:

Невозможно вставить явное значение для столбца идентификаторов в таблице «Персона». когда IDENTITY_INSERT установлен на OFF.

PersonId не определен явно и составляет 0 во время сохранения.

Обратите внимание, что вставка новой строки сотрудника работает нормально без отношений с сотрудником.

Я упускаю что-то очевидное или мой подход совершенно неверен? К сожалению, поиск в Google не помог.

РЕДАКТИРОВАТЬ: Я нашел решение, но я добавлю код лица для людей сталкивается с той же проблемой.

Физическое лицо:

public partial class Person
{
    public Person()
    {
    }

    [Key]
    public int PersonId { get; set; }
    ...
    public virtual Employee Employee { get; set; }

Сотрудник юридического лица:

public partial class Employee
{
    public Employee()
    {
    }

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int EmployeeId { get; set; }
    ...
    public Data.Dal.Person Person { get; set; }

Отношение, определенное в контексте:

modelBuilder.Entity<Employee>()
   .HasRequired(s => s.Person)
   .WithRequiredPrincipal(ad => ad.Employee);

Ответы [ 3 ]

0 голосов
/ 11 сентября 2018

Я нашел решение.Я использую Code First для создания объектной модели данных.EF создал это отношение как:

    modelBuilder.Entity<Employee>()
        .HasRequired(s => s.Person)
        .WithRequiredPrincipal(ad => ad.Employee);

По определению EF Employee является основным ссылочным классом, что неверно.Я изменил ссылочный класс на Person, и пока все работает нормально.

Правильные отношения:

    modelBuilder.Entity<Employee>()
        .HasRequired(s => s.Person)
        .WithRequiredDependent(ad => ad.Employee);

Подробнее о наличии ссылки и ответе в ответе: Ef-код - первое различие между принципамии зависимый

0 голосов
/ 11 сентября 2018

Я думаю, что вы можете решить вашу проблему с SQL Server, установить отношения с сотрудником на вашем SQL-сервере и попробовать снова ввести нового человека.

0 голосов
/ 11 сентября 2018

Вы автоматически увеличиваете свой столбец идентификаторов?Определено в вашей базе данных SQL.Если это так, попробуйте украсить соответствующее свойство вашей сущности атрибутом DatabaseGenerated.Identity.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...