SQL-запрос к нескольким объектам с использованием Entity Framework 6 - PullRequest
1 голос
/ 06 марта 2019

Я уделяю время изучению EF (особенно версии 6).

Я создал две таблицы на MSSQL и соединил EF6 с базой данных, создав каркас модели EF.

Тогда я создал классы в коде. Мое желание состоит в том, чтобы вытащить одну строку со списком элементов для «UserDatas» (да, я знаю, что это с ошибкой).

Рассмотрим этот код:

public class user
{
    [Key]
    public int pkID;
    public string ForeignCode;
    public string UserName;
    public virtual List<UserData> UserDatas { get; set; }
}

public class UserData
{
    [Key]
    public int pkID;
    public int fkUserID;
    public string ColumnName;
    public string ColumnValue;
}

class Program
{
    static TestData db = new TestData();

    static void Main(string[] args)
    {
        var record = db.tblUsers.Select(x => new { x.UserName, x.pkID }).FirstOrDefault();

        var record2 = db.tblUsers.Include(x => x.tblUserDatas).ToList();

        Console.ReadLine();
    }


}

Первый запрос - это всего лишь тест для извлечения первичной записи в таблице tblUsers.

Во втором запросе я пытаюсь получить все поля, относящиеся к этому пользователю, в том числе такие, как имя, фамилия, адрес и т. Д. ...

Что происходит, когда я устанавливаю точку останова на Console.Readline (), я вижу 5 строк в списке для record2. Класс «user» дублируется в каждой из этих строк. Я ожидал увидеть его только один раз со списком элементов для «UserDatas».

Как получить такой запрос, как я ожидаю, с одной строкой, содержащей список «UserDatas»?

Опять же, это только для целей обучения, поэтому не беспокойтесь о данных и о том, является ли это лучшим способом их хранения.

1 Ответ

4 голосов
/ 06 марта 2019

Это должно быть так просто, как показано ниже (если вам не нужен проекционный / анонимный объект) и при условии, что ваши сущности настроены правильно

var user = db.tblUsers
             .Include(x => x.UserDatas) // include user data
             .FirstOrDefault(); // select the first user

Некоторые заметки,

  1. Нет необходимости добавлять префиксы к таблицам с tbl
  2. Нет необходимости добавлять префиксы к полям pk, fk
  3. Если вы использовали Id, вам не нужно указывать [key]
...