2014-02-04 5 views
1

Я пытаюсь получить имя пользователя для владельца сообщения. Вот что я пробовал.ASP.NET MVC получает имя владельца контента пользователя

var model = db.Posts 
      .OrderByDescending(d => d.PostDate) 
      .Select(p => new PostViewModel 
      { 
       Id = p.Id, 
       Title = p.Title, 
       Link = p.Link, 
       Description = p.Description, 
       Username = db.UserProfiles.Find(p.UserId).UserName 
      }).ToList(); 

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

Method 'Project.Models.UserProfile Find(System.Object[])' declared on type 'System.Data.Entity.DbSet`1[Project.Models.UserProfile]' cannot be called with instance of type 'System.Data.Objects.ObjectQuery`1[Project.Models.UserProfile]' 

Так как я могу получить имя пользователя автора?

ответ

2

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

var model = db.Posts 
     .Include("UserProfile") 
     .OrderByDescending(d => d.PostDate) 
     .Select(p => new PostViewModel 
     { 
      Id = p.Id, 
      Title = p.Title, 
      Link = p.Link, 
      Description = p.Description, 
      Username = p.UserProfile.UserName 
     }).ToList(); 
+0

Так что в моей модели Post вместо public int UserId {get; задавать; } У меня должен быть пользователь UserProfile User {get; задавать; }? – user2412672

+0

Если это связано с вашими данными, да. Хотя это не обязательно «вместо», вы можете иметь как свойство UserId (в те моменты, когда вам нужно только свойство UserId и UserProfile для тех времен, когда вы хотите получить весь пользовательский файл. –

+0

Вот как структура сущности генерирует код из диаграммы. :) – user2412672

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