Причуды ADO.NET Entity Framework - PullRequest
       13

Причуды ADO.NET Entity Framework

0 голосов
/ 21 января 2010

Когда я запускаю код ниже, он работает

            int charId = int.Parse(Request.Params["charId"]);
            EveFPT ctx = new EveFPT();
            var theCharQuery = from a in ctx.tblChars
                               where a.id == charId
                               select new
                                          {
                                              Name = a.name,
                                              CorpName = a.tblCorps.name,
                                              AllianceName = a.tblCorps.tblAlliances.name
                                          };
            if(theCharQuery.Count() == 1)
            {
                var theChar = theCharQuery.First();
                lblCharName.Text = theChar.Name;
                lblCorpName.Text = theChar.CorpName;
                lblAllianceName.Text = theChar.AllianceName;
            }

Однако, если я ниже

            var theCharQuery = from a in ctx.tblChars
                          where a.id == charId
                          select a;
            if(theCharQuery.Count() == 1)
            {
                tblChars theChar = theCharQuery.First();
                lblCharName.Text = theChar.name;
                lblCorpName.Text = theChar.tblCorps.name;
                lblAllianceName.Text = theChar.tblCorps.tblAlliances.name;
            }

заявление

theChar.tblCorps

всегда возвращает ноль. Кто-нибудь знает, что происходит?

Ответы [ 2 ]

1 голос
/ 21 января 2010

Я думал о том же, хотя я и не ожидал, что он также с готовностью загрузит выражение проекции первого примера. Один раз способ попробовать это:

var charId= int.Parse(Request.Params["charId"]);
EveFPT ctx = new EveFPT();
var theChar = ( from a in ctx.tblChars.Include ( "tblCorps" )
                where a.id == charId
                select new
                {
                    Name = a.name,
                    CorpName = a.tblCorps.name,
                    AllianceName = a.tblCorps.tblAlliances.name
                } ).FirstOrDefault ();
if(theChar != null)
{
    lblCharName.Text = theChar.Name;
    lblCorpName.Text = theChar.CorpName;
    lblAllianceName.Text = theChar.AllianceName;
}
1 голос
/ 21 января 2010

Entity Framework не хочет загружать дочерний объект. Вы должны проверить, загружены ли они, а затем вызвать Load (), если это не так.

if(!theChar.tblCorps.IsLoaded)
{
    theChar.tblCorps.Load();
}

Вот хорошее прочтение из MSDN по теме:

Как: Explicity Загрузить связанные объекты (Entity Framework)

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