映射到模型
Mapping to model
如何使用实体将连接 table 数据映射到代码优先方法中的模型?我想在获取聊天消息时获取属于聊天消息的用户信息。我收到错误
cannot type linq.iqueryable to collections.generic.list
但我无法 ToList() 我的可查询对象。
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; }
}
只需使用 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();
如果您尝试从聊天消息中获取用户信息,您可以尝试:
db.ChatMessages.Include(chatMessage => chatMessage.User).ToList();
以上 returns 所有聊天消息使用的所有用户。
这里的技巧是使用延迟加载的 EF。由于您在 ChatMessages 上的外键指向用户,因此 EF 足够聪明,可以 return 它进入您的虚拟用户字段。
只要你的上下文(在你的例子中,变量 db
)没有被处理延迟加载就会加载你的用户,但如果你想立即加载它,你可以使用 Include(chatMessage => chatMessage.User)
方法代替。
如何使用实体将连接 table 数据映射到代码优先方法中的模型?我想在获取聊天消息时获取属于聊天消息的用户信息。我收到错误
cannot type linq.iqueryable to collections.generic.list
但我无法 ToList() 我的可查询对象。
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; }
}
只需使用 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();
如果您尝试从聊天消息中获取用户信息,您可以尝试:
db.ChatMessages.Include(chatMessage => chatMessage.User).ToList();
以上 returns 所有聊天消息使用的所有用户。
这里的技巧是使用延迟加载的 EF。由于您在 ChatMessages 上的外键指向用户,因此 EF 足够聪明,可以 return 它进入您的虚拟用户字段。
只要你的上下文(在你的例子中,变量 db
)没有被处理延迟加载就会加载你的用户,但如果你想立即加载它,你可以使用 Include(chatMessage => chatMessage.User)
方法代替。