我需要将这两个属性定义为我的一个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;
}
}
我的问题是..我的应用程序正在使用存储库模式,我已经读过在模型类中包含数据访问是不正确的做法......
你们有什么推荐? 请帮忙 提前谢谢
答案 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属性调用那样影响性能。