Entity Framework, сопоставьте отношения 2 X 1 к 1 с той же моделью - PullRequest
0 голосов
/ 31 октября 2018

У меня есть 2 модели Entity Framework, первая - модель Employee, а вторая - модель Lead. С каждым новым сгенерированным лидерством работают 2 сотрудника. Первый делает холодный звонок, второй следует. Первичным ключом для модели Employee является EmployeeId и модель Lead. Я хочу, чтобы два внешних ключа были примерно такими же, как EmployeeId1 и EmplyeeId2, которые связаны в отношениях 1: 1 с моделью Employee

public class Lead
{
   [Key]
   public int LeadId { get; set; }

   public string FirstName { get; set; }

   public string LastName { get; set; }

   //foreign key to EmployeeId in Employee model
   public int EmplyeeId2 { get; set; }

   //second foreign Key to EmployeeId in Employee model
   public int EmplyeeId1 { get; set; }

   public virtual Employee Employee {get; set;}
}

Есть идеи, как лучше всего это сделать, чтобы я мог получить доступ к связанным свойствам в Linq, используя что-то вроде Lead.Employee.EmployeeName?

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Вы можете создать сценарий, если у вас есть класс Employee и два класса, которые наследуются от этого класса. Но я не думаю, что было бы хорошей идеей называть эти классы Employee1 и Employee2, у них могут быть имена, связанные с некоторыми характеристиками этих сотрудников, такими как Manager и Supervisor.

Класс Сотрудник

public class Employee 
{
 public string FName {get; set;}
 public string LName{ get; set;}
 // other properties
 }

Менеджер классов:

public class Manager: Employee 
{
 public int ManagerId {get; set;}

 public int LeadId{ get; set;}
 public virtual Lead Lead{ get; set;}
 // other properties
 }

Руководитель класса:

public class Supervisor: Employee 
{
 public int SupervisorId {get; set;}
 public virtual Lead Lead{ get; set;}
 public int LeadId{ get; set;}
 // other properties
 }

Ведущий класс:

 public class Lead
{
   [Key]
   public int LeadId { get; set; }

   public string FirstName { get; set; }

   public string LastName { get; set; }

   //foreign key to EmployeeId in Employee model
   public int SupervisorId { get; set; }

   //second foreign Key to EmployeeId in Employee model
   public int ManagerId { get; set; }

   public virtual Manager Manager{ get; set;} 
   public virtual Supervisor Supervisor {get; set;}
}

Ключ Foregn с текущими API:

modelBuilder.Entity<Lead>()
            .HasOne(p => p.Manager)
            .WithOne(i => i.Lead)
            .HasForeignKey<Manager>(b => new {b.ManagerId, b.SupervisorId}); 
0 голосов
/ 31 октября 2018

Это должно сработать:)

public class Lead {
    [Key]
    public int LeadId { get; set; }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    //foreign key to EmployeeId in Employee model
    public int EmplyeeId2 { get; set; }

    //second foreign Key to EmployeeId in Employee model
    public int EmplyeeId1 { get; set; }

    [ForeignKey("EmplyeeId1")]
    public virtual Employee Employee1 {get; set;}

    [ForeignKey("EmplyeeId2")]
    public virtual Employee Employee2 {get; set;}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...