Entity Framework Core - реализация между двумя таблицами без использования первичного ключа - PullRequest
0 голосов
/ 07 января 2019

Я хотел бы написать консольное приложение в dotnet core 2.1 с EFCore.Postgres 2.1.2.

У меня есть две таблицы в существующей базе данных. Каждая таблица имеет свой собственный первичный ключ, но эти таблицы должны быть связаны через другое поле - UserId

db

Мои модели:

public class UserAddress
{
    public int UserAddressId {get;set;}
    public int UserId {get;set;}
    public string City {get;set;}
    public string Street {get; set;}

    public virtual UserDetails UserDetails {get;set;}
}

public class UserDetails
{
    public int UserDetailId {get;set;}
    public int UserId {get;set;}

    public string Name {get;set;}
    public string Surname {get;set;}
}

Как я могу научить Entityframe присоединиться к этим таблицам через UserId? Я хотел бы использовать их, как показано ниже

using (var MyDb = new GraffitiDbContext())
{
    var query = MyDb.UserAddress              
        .Include(row => row.UserDetails);

    foreach (var item in query)
    {
        Console.Writeline(item.UserDetails.Name);
    }
}

1 Ответ

0 голосов
/ 07 января 2019

С вашей текущей конфигурацией вы не можете вывести это объединение, поскольку вам придется перейти от UserAddress до User до UserDetails. Вы можете либо добавить отношения между UserAddress и UserDetails, чтобы сделать это возможным, либо использовать следующую контекстную навигацию:

context.UserAddress.Include(x => x.User).ThenInclude(x => x.UserDetails)

Проблема в том, что User может иметь много UserDetails, поэтому, когда вы включаете User в запрос UserAddress, существует вероятность, что вы получите много записей.

Address1 -> User1 -> UserDetail1
Address1 -> User1 -> UserDetail2
...