Код структуры сущностей Первый каскад один к одному удаляется - PullRequest
1 голос
/ 21 июня 2019

Имеется и модель «Адрес», используемая несколькими другими моделями («Сотрудник» и «Клиент»).
Я бы назвал это отношение один к одному, я могу ошибаться.Адрес требуется для обеих других моделей.Удалить, удаляет только родительский объект.

Пробовал как в EF Core, так и в EF6.Удалить удаляет родительский объект, но не объект «Адрес».

public class Address
{
    public int AddressID { get; set; }
    public string Street { get; set; }
    public string CityStateZip { get; set; }
}
public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
    [Required]
    public virtual Address EmployeeAddress { get; set; }
}
public class Client
{
    public int Id { get; set; }
    public string Name { get; set; }
    [Required]
    public virtual Address ClientAddress { get; set; }
}

Нет сообщений об ошибках - context.remove просто не удалит дочерний объект.Полный нуб здесь, когда дело доходит до EF.Извините, это, вероятно, очень простой вопрос, но, пожалуйста, поверьте, я много искал.Большинство решений предлагают внешний ключ к родительскому элементу, но в этом случае дочерний объект может использоваться (но не совместно использоваться) в нескольких различных моделях.

1 Ответ

0 голосов
/ 21 июня 2019

Один и тот же объект Address может использоваться в нескольких экземплярах Employee и / или Client, как в настоящее время реализовано.

Предложение, которое вы получили

Большинство решений предлагают внешний ключ к родительскому элементу, но в этом случае дочерний объект может использоваться (но не совместно использоваться) в нескольких различных моделях.

сообщает Entity Framework, что данный Адрес может появиться только у одного конкретного Сотрудника / Клиента.

Вы должны быть в состоянии решить эту проблему, если Employee и Client наследуют общий базовый класс, например,

public class Person
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    [Required]
    public virtual Address PersonAddress { get; set; }
}

public class Employee : Person
{
    // Other properties that make Employee unique go here
}

public class Client : Person
{
    // Other properties that make Client unique go here
}

Затем добавьте обратную ссылку к базовому классу

public class Address
{
    public virtual int AddressID { get; set; }
    public virtual string Street { get; set; }
    public virtual string CityStateZip { get; set; }
    [Required]
    public virtual Person AddressOf { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...