映射到模型

时间:2019-03-09 12:13:59

标签: c# asp.net-mvc ef-code-first-mapping

如何使用实体的代码优先方法将联接表数据映射到模型?我想在获取聊天消息时获取属于该聊天消息的用户信息。我遇到错误

  

不能键入linq.iqueryable到collections.generic.list

但是我无法ToList()我的iqueryable。

   List<Models.ChatMessageModel> list = from dbModel in db.ChatMessages
                                              join a in db.Users on dbModel.UserId equals a.UserId
                                              select new Models.ChatMessageModel
                                              {
                                                  User = new Models.UserModel
                                                  {
                                                      UserId = dbModel.UserId,
                                                      UserName = a.UserName
                                                  },
                                                  UserId = a.UserId,
                                                  DateSent = dbModel.DateSent,
                                                  ChatMessage = dbModel.ChatMessage,
                                                  ChatMessageId = dbModel.ChatMessageId
                                              };

ChatMessageModel

 public class ChatMessageModel
    {
        [Key]
        public Guid ChatMessageId { get; set; }

        public virtual Guid UserId { get; set; }

        [ForeignKey("UserId")]
        public virtual UserModel User { get; set; }
        public string ChatMessage { get; set; }

        public DateTime DateSent { get; set; }
    }

2 个答案:

答案 0 :(得分:0)

只需使用ToList方法转换为List

List<Models.ChatMessageModel> list = (from dbModel in db.ChatMessages
        join a in db.Users on dbModel.UserId equals a.UserId
        select new Models.ChatMessageModel
        {
           User = new Models.UserModel
           {
               UserId = dbModel.UserId,
               UserName = a.UserName
           },
           UserId = a.UserId,
           DateSent = dbModel.DateSent,
           ChatMessage = dbModel.ChatMessage,
           ChatMessageId = dbModel.ChatMessageId
        }).ToList();

答案 1 :(得分:0)

如果您尝试从聊天消息中获取用户信息,则可以尝试:

db.ChatMessages.Include(chatMessage => chatMessage.User).ToList();

以上返回所有聊天消息使用的所有用户。

这里的窍门是使用延迟加载的EF。由于您在ChatMessages上的外键指向用户,因此EF足够聪明,可以将其返回到虚拟用户字段。

只要不处理您的上下文(在您的情况下,变量db),延迟加载就会加载您的用户,但是如果您希望立即加载,则可以使用{{1} }方法。