在我的应用程序中,我有一个edmx文件,其中包含一些代表我的表的部分类,以及一个上下文类,我有我需要的方法,即GetMessages()
和GetMessageById(long idMessage)
。
在这种情况下,我使用GetMessages()
方法填充网格。一切正常。
Message
实体类是这样的:
[Table("Message")]
public partial class Message
{
public long IdMessage{get;set;}
public long IdStatus{get;set;}
}
问题是我有另一张表,我有使用IdStatus需要的StatusDescription。
我使用此属性创建了另一个分部类:
public partial class Message
{
private static readonly MessageRepository MessageRepository ;
static Message()
{
MessageRepository = new MessageRepository();
}
public string StatusDescription
{
get { return MessageRepository .GetMessageDescription(this.Cd_SchedulerStatus); }
}
}
MessageRepository
中的方法:
public MessageRepository()
{
_appContext= AppContext.GetContext();
}
public string GetMessageStatusDescription(int statusId)
{
var status = _appContext.Message.FirstOrDefault(id => id.IdStatus.Equals(statusId));
return status != null ? status.StatusDescription : string.Empty;
}
我知道它会产生问题并且它不是处理问题的最佳方法,因为我每次向数据库发送一个新查询时都会获得实体类中的数据,我有n + 1问题。
我想知道是否有人有这个问题并且有什么最佳解决方案?
答案 0 :(得分:3)
我建议你为每个消息描述请求创建一个新的上下文:
public string GetMessageStatusDescription(int statusId)
{
using (var appContext = AppContext.GetContext())
{
var status = appContext.Message.FirstOrDefault(id => id.IdStatus == statusId);
return status != null ? status.StatusDescription : string.Empty;
}
}