получение нулевых значений при переборе списка - PullRequest
0 голосов
/ 20 сентября 2019
EntityMapper<Datahub.Test_Consumer, Models.ConsumerBio> entObject = new EntityMapper<Datahub.Test_Consumer, Models.ConsumerBio>();
EntityMapper<Datahub.Test_Address, Models.ConsumerAddress> entObjectAdd = new EntityMapper<Datahub.Test_Address, Models.ConsumerAddress>();
EntityMapper<Datahub.Test_CardDetails, Models.ConsumerCardDetails> entObjectcard = new EntityMapper<Datahub.Test_CardDetails, Models.ConsumerCardDetails>();

List<Models.ConsumerBio> lstModConsumer = new List<Models.ConsumerBio>();           
List<Models.ConsumerAddress> lstobjConAdd = new List<Models.ConsumerAddress>();
List<Models.ConsumerCardDetails> lstobjConcard = new List<Models.ConsumerCardDetails>();

List<Datahub.Test_Consumer> lstDBConsumer = Datahub.DataLayer.GetAllConsumerList();
//  Models.ConsumerFamilyMember objConFMembers = new Models.ConsumerFamilyMember();           

foreach (var item in lstDBConsumer)
{
    foreach (var itemadd in item.Test_Address)
    {
        lstobjConAdd.Add(entObjectAdd.translate(itemadd));
    }

    foreach (var itemcard in item.Test_CardDetails)
    {
        lstobjConcard.Add(entObjectcard.translate(itemcard));                   
    }                

    lstModConsumer.Add(entObject.translate(item));
}

Итак, в приведенном выше объекте lstDBConsumer я получаю все значения в БД, но, перебирая и присваивая значения lstModConsumer, я получаю все нулевые значения, кроме моего поля DOB.Пожалуйста скажите мне решение для этого?

1 Ответ

0 голосов
/ 20 сентября 2019

Если вы обращаетесь к дочерним свойствам за пределами контекста вашей базы данных (что, по-видимому, вы и есть), вам необходимо явно включить их во время выбора из базы данных.

Используя простой пример из MS, чтобы показать включение:

var blogs = new List<Blogs>();
var posts = new List<Posts>();
using (var context = new BloggingContext())
{
    blogs = context.Blogs.Include(blog => blog.Posts).ToList();
}
foreach(var p in blogs.Posts)
{
  posts.add(p);
}

ЕСЛИ вы выполняете назначение, находясь в контексте соединения с БД, вы можете просто вызвать свойство.В этом случае перечисление происходит автоматически, так как он все еще имеет контекст для базы данных для извлечения свойств.

var posts = new List<Posts>();
using (var context = new BloggingContext())
{
    var blogs = context.Blogs.Include(blog => blog.Posts).ToList();
    foreach(var p in blogs.Posts)
    {
       posts.add(p);
    }
}

Entity Framework не загружает автоматически свойства навигации (т.е. вы не получите автоматически дочерние объекты вашего объекта) из-зак концепции под названием «Ленивая загрузка», которая включена по умолчанию.

Создавая образ, вы располагаете массивной реляционной базой данных, и она автоматически извлекает все связанные объекты при выполнении простого запроса.Ваш очень простой запрос может иметь огромные последствия, если он автоматически загрузит все отношения.Может быть потенциальный кошмар.Теперь есть способ отключить ленивую загрузку, которая находится вне контекста этого вопроса.Пожалуйста, обратитесь к следующей ссылке для более легкого чтения и более подробного объяснения: https://docs.microsoft.com/en-us/ef/core/querying/related-data

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

Вы разговариваете с Джоном по телефону и спрашиваете его, какие у него планы на утро.Он посещает собрание в 9:30.

Затем вы вешаете трубку, звоните Джейн и рассказываете ей о планах Джона на день.Вы говорите Джейн о встрече 9:30, а затем она спрашивает: «Кто все будет на встрече?»

У вас нет подсказки, потому что вы не спрашивали Джона, когда разговаривали с ним.Вы ЗНАЕТЕ, что на собраниях присутствуют посетители, но вы не представляете, кто они, потому что вы не спросили Джона, когда говорили с ним.Вы также знаете, что встречи имеют повестки дня, места, звонить по номерам, т. Д.Было бы довольно неэффективно получить все подробности встречи, если бы вы не заботились о каждой детали.Джон, вероятно, перестанет отвечать на ваши телефонные звонки, если вы будете действовать таким образом каждый раз, когда взаимодействуете с ним.

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

ИЛИ

Если вы разговаривали по телефону с Джоном и Джейн, и вопрос был задан (все ещев контексте базы данных, когда мы хотим найти дополнительную информацию), тогда эта информация будет легко доступна, потому что Джон на связи.

Надеюсь, это имеет смысл.

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