Entity Framework Условное соединение - PullRequest
0 голосов
/ 12 сентября 2018

Я создал MVC, используя Entity Framework, и я столкнулся с ситуацией, которую я не знаю, как решить.

Я использую автоматические объединения и связи EF (все мои модели таблиц были созданы EF автоматически).

Теперь проблема: у меня есть таблица клиентов, в которой есть два (соответствующие) поля - personID и employerID.Только один из них содержит данные, другой будет нулевым (клиент - либо человек, либо работодатель).Когда я пытаюсь включить модель employer в набор результатов, меня выдают (без какого-либо сообщения, когда я отлаживаю, я вижу, что в контенте есть данные, но иногда сотрудник имеет значение NULL), я также не уверен, какдизайн должен выглядеть так.Это мой код:

Заказчик:

public partial class Customer
{
    public Customer()
    {
        Account = new HashSet<Account>();
    }

    public long Id { get; set; }
    public int? PersonId { get; set; }
    public int Type { get; set; }
    public int? EmployerId { get; set; }

    public Employer Employer { get; set; }
    public ICollection<Account> Account { get; set; }
}

Работодатель:

public partial class Employer
{
    public Employer()
    {
        Customer = new HashSet<Customer>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public int? IdType { get; set; }

    public ICollection<Customer> Customer { get; set; }
}

Персона:

public partial class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Sex { get; set; }
    public DateTime? BirthDate { get; set; }
    public int IdType { get; set; }
}

Теперь, когда я бегув моем репозитории:

 var collectionBeforePaging = _context.Customer

Все работает, но работодатель равен NULL.Если я использую:

 var collectionBeforePaging = _context.Customer.Include(a => a.Employer)

Тогда проект завершится неудачей.

Как я могу сделать это присоединения?

Ответы [ 2 ]

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

Какую версию EF вы используете? Я думаю, что вы что-то упустили:

В работодателе:

[ForeignKey("EmployerId")]    
[InverseProperty("Customers")]
public virtual Employer Employer { get; set; }

public int? EmployerId { get; set; }

В Заказчике:

[InverseProperty("Employer")]
public virtual ICollection<Customer> Customers { get; set; }

Это также можно сделать в объекте Dbontext

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

Пожалуйста, укажите ForeignKey для клиента

public int? EmployerId { get; set; }

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