帮助向LinqToSql类添加属性

时间:2010-08-10 03:53:17

标签: linq-to-sql asp.net-mvc-2

我需要将这两个属性定义为我的一个linqclasses(Employee)..因为我需要跟踪Employees的健康进度...每个员工每月需要物理检查,所以我定义了这些属性

    public decimal? Initial_Mass_Index
            {
                get
                {
                    return this.PhysicalExams.OrderBy(p => p.Date).First().MassIndex ?? 0;
                }
            }
   public decimal? Current_Mass_Index
            {
                get
                {
                    return this.PhysicalExams.OrderByDescending(p => p.Date).First().MassIndex ?? 0;
                }
        }

我的问题是..我的应用程序正在使用存储库模式,我已经读过在模型类中包含数据访问是不正确的做法......

你们有什么推荐? 请帮忙 提前谢谢

2 个答案:

答案 0 :(得分:0)

您可以创建类似ExtendedEmployee的类,它继承您的Employee模型

public class ExtendedEmployee : Employee
{
    public decimal? Initial_Mass_Index
    {
        get
        {
            return this.PhysicalExams.OrderBy(p => p.Date).First().MassIndex ?? 0;
        }
    }
    public decimal? Current_Mass_Index
    {
        get
        {
            return this.PhysicalExams.OrderByDescending(p => p.Date).First().MassIndex ?? 0;             
        }
    }
}

并使用此ExtendedEmployee作为您的模型。

答案 1 :(得分:0)

情侣观察:没有必要让十进制可以为空,因为无论如何你都无法合并它。此外,您不需要创建ExtendedEmployee,因为您只需添加到分部类。

我可能倾向于实现IMassIndexRepository

public interface IMassIndexRepository
{
   public decimal GetInitialMassIndex(Employee e);
   public decimal GetCurrentMassIndex(Employee e);
}

然后,如果您希望将此作为模型的一部分,则可以添加扩展方法或引用模型中的存储库。我倾向于后者:

public partial class Employee
{
    public decimal? Initial_Mass_Index
    {
        get
        {
            return GetMassIndexRepository().GetInitialMassIndex(this);
        }
    }

    public decimal? Current_Mass_Index
    {
        get
        {
            return GetMassIndexRepository().GetCurrentMassIndex(this);
        }
    }
}

您必须实现GetMassIndexRepository(可能使用一些DI容器)。拥有MassIndexRepository后,您可以在该级别实现缓存,并且执行“数据访问”不会像直接Linq属性调用那样影响性能。