2017-02-16 5 views
0

Вот моя модельEntity Framework `не LoadWith` вернуть данные

public IEnumerable<PostJob> GetAllJobsByUserId(int id) 
{ 
    using (var context = new CleanerDataContext(@"Data Source=.\sqlexpress;Initial Catalog='Cleaning Lady';Integrated Security=True")) 
    { 
     var loadOptions = new DataLoadOptions(); 
     loadOptions.LoadWith<PostJob>(c => c.Cleaner); 
     loadOptions.LoadWith<PostJob>(c => c.User); 
     context.LoadOptions = loadOptions; 
     return context.PostJobs.Where(r => r.userId == id).ToList(); 
    } 
} 

На мой взгляд, я пытаюсь доступ к свойствам в«чистых»

@foreach (var k in Model.AllJobs) 
{ 
    <div class="panel panel-default instructions"> 
     <div class="panel-body"> 
      <span>Date: @k.date.ToShortDateString() From: @k.timeFrom Until: @k.timeUntil</span> 
      <span>Price: @k.Cleaner.Price</span> 
      <span>Total: </span> 
     </div> 
    </div> 
    <br /> 
} 

Но я получаю сообщение об ошибке

Ссылка на объект не установлена ​​в экземпляр объекта.

Почему я получаю эту ошибку, если загружаю «Очиститель» вместе с «PostJob»?

Вот postjob в базе данных

enter image description here Я использую LINQ

+3

У вас есть свойства навигации, определенные для Cleaner и User? Почему вы включаете пользователя? ваше мнение, которое вы опубликовали, не использует никаких свойств пользователя. Include будет включать весь другой объект в запрос linq. вы используете только 1 свойство. было бы лучше определить модель представления и заполнить ее из вашего контекста и вернуть модель представления в представление. – Fran

+0

Я тоже собирался использовать User. Я не могу заполнить его b4, потому что это список. Как я могу сопоставить каждого чистящего средства с каждым чистильщиком? – Newbie

+0

https://msdn.microsoft.com/en-us/library/jj713564(v=vs.113).aspx – Fran

ответ

0

Я думаю, вам нужно использовать Include() взамен

return context.PostJobs.Include(x=>x.Cleaner).Where(r => r.userId == id).ToList(); 

ваш метод будет

public IEnumerable<PostJob> GetAllJobsByUserId(int id) 
{ 
    using (var context = new CleanerDataContext(@"Data Source=.\sqlexpress;Initial Catalog='Cleaning Lady';Integrated Security=True")) 
    { 
     var loadOptions = new DataLoadOptions(); 
     loadOptions.LoadWith<PostJob>(c => c.Cleaner); 
     loadOptions.LoadWith<PostJob>(c => c.User); 
     context.LoadOptions = loadOptions; 
     return context.PostJobs.Include(x=>x.Cleaner).Where(r => r.userId == id).ToList(); 
    } 
} 

Не забудьте включить

using System.Data.Entity; 
+0

'System.Data.Linq.Table ' не содержит определения для «Включить» и не использовать метод расширения «Включить», принимающий первый аргумент типа – Newbie

+0

'using System.Data.Entity;' использовать это пространство имен. –

+0

теперь получает ссылку на объект, не установленную на экземпляр объекта. – Newbie

 Смежные вопросы

  • Нет связанных вопросов^_^