Как выбрать данные из структуры объекта без выбора его коллекции (сторонняя таблица) - PullRequest
0 голосов
/ 04 февраля 2019

Я использую C # для выбора данных из моей базы данных.Теперь у меня есть две таблицы, первая - aspnetuser, вторая - aspnetuserroles, у aspnetuserroles есть связь внешнего ключа с таблицей aspnetuser, когда я выполняю следующий запрос

db.AspNetUsers.ToList()

, данные aspnetroles появятся вданные aspnetusers.Это приведет к тому, что моя таблица данных не сможет отобразить свои данные, потому что таблица данных ожидает одно значение в одном параметре столбца.Если данные роли aspnet внутри этого json будут отображаться в виде нескольких строк, и данные не будут приняты. Если я удалю эту связь с внешним ключом, моя таблица данных будет отображаться без ошибок.

В этом случае, что яхочу, как выбрать таблицу aspnetusers, не вытаскивая ее чужую таблицу.Например,

db.AspNetUsers.Select(x=>x.AspNetUsers).ToList();

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Вы настроили это в сопоставлениях с использованием методов Fluent API

  • HasOptional
  • HasMany
  • Ignore

и т.д..Но обычно я создаю привязанные к схеме представления в базе данных, а затем отображаю их в EF.Он работает очень хорошо в тех случаях, когда нас интересует только плоский запрос без всех соединений.

Или используйте проекции Linq to EF в качестве ответа JonhB ...

var result = (from a in db.AspNetUsers
          select new AspNetUser { Name = a.Name, 
                       ...
                       }).ToList();

Просто сделайтеконечно, вы не вызываете ToList на db.AspNetUsers, потому что это материализует запрос на AspNetUsers и все его ссылки на внешние ключи, и в результате проекция выполняется в памяти после того, как запрос вернет

0 голосов
/ 05 февраля 2019

Отключить LazyLoading.Так что дети не будут выбраны автоматически.

0 голосов
/ 04 февраля 2019

попробуйте сделать что-то вроде этого (хорошо для сохранения света возвращаемого объекта и оставьте после себя ненужные столбцы):

(я только что придумал какое-то имя col, но вы поняли идею.)

var result = (from a in db.AspNetUsers
              select new AspNetUser { Name = a.Name, 
                           othercol1 = a.othercol1,
                           othercol2 = a.othercol2,
                           }).ToList();

Сноска. В действительности, как правило, не рекомендуется возвращать реальный объект db во внешний интерфейс, поэтому вы можете захотеть иметь свои собственные объекты передачи данных (DTO).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...