如何处理EF中的自定义属性?

时间:2014-07-17 13:35:00

标签: c# .net entity-framework

在我的应用程序中,我有一个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问题。

我想知道是否有人有这个问题并且有什么最佳解决方案?

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;
    }
}