Помогите добавить свойства в классы LinqToSql - PullRequest
1 голос
/ 10 августа 2010

Мне нужно определить эти два свойства для одного из моих linqclasses (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;
                }
        }

У меня вопрос: мое приложение использует шаблон репозитория, и я прочитал, что не имеет права иметь доступ к данным внутри классов моделей ...

Что вы, ребята, рекомендуете? пожалуйста помоги заранее спасибо

Ответы [ 2 ]

0 голосов
/ 10 августа 2010

Пара наблюдений: нет необходимости делать десятичное значение равным нулю, так как вы все равно будете его объединять. Кроме того, вам не нужно создавать 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.

0 голосов
/ 10 августа 2010

вы можете создать класс, подобный 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 в качестве модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...