Как вы можете инициализировать карту в проекте DAL? - PullRequest
2 голосов
/ 13 июня 2019

У меня есть простая структура решения проекта API, проекта DAL (Библиотека классов), проекта общих моделей.Внутри проекта DAL я создал пользовательскую карту для одного из моих POCO:

internal class AssumptionsMap : EntityMap<Assumptions>
{
    internal AssumptionsMap()
    {
        Map(a => a.Rate).ToColumn("InitialRate");
        Map(a => a.Credit).ToColumn("CredValue");
        Map(a => a.CreditType).ToColumn("CredType");
    }
}

Я создал это в проекте DAL (библиотека классов), поскольку именно здесь его нужно будет использовать вхранилище, которое вызывает, чтобы получить предположения.Однако куда я могу добавить это:

FluentMapper.Initialize(cfig =>
{
    cfig.AddMap(new AssumptionsMap());
});

Мой проект DAL не имеет 'App_Start', как в проекте API, так как же эту карту можно инициализировать?Я чувствую, что здесь упускаю что-то очевидное.

Моя текущая попытка состоит в том, чтобы просто использовать статический конструктор в созданном мною классе QueryStore, в котором хранятся все мои запросы.Однако при этом ничего не происходит:

public class QueryStore
{
    public const string GetSomething = @"some query";
    // more queries

    static QueryStore()
    {
        FluentMapper.Initialize(cfig =>
        {
            cfig.AddMap(new CommonAssumptionsMap());
        });
    }
}

1 Ответ

0 голосов
/ 13 июня 2019

Поскольку это проект библиотеки классов, который можно использовать повторно, назвать его некуда.Библиотеки классов не имеют точки входа.Вы должны сделать трюк.

Определить какой-то InitDal метод и поместить в него код.Вызывающий должен вызвать этот метод один раз, прежде чем начать использовать свой уровень доступа к данным.Вам необходимо обучить вызывающего абонента с помощью документации, файла справки и т. Д. Это поможет отделить логику инициализации / отображения от остальной части кода DAL.

Другая альтернатива, как вы указали в вопросе (ОБНОВЛЕНИЕ 2 - теперь удалено как попыткаответить) это использовать static конструктор на одном из ваших классов.Выберите класс, для которого создается экземпляр, или к его статическому члену обращаются до того, как ваше отображение входит в рисунок.

Статический конструктор используется для инициализации любых статических данных или для выполнения определенного действия, которое необходимо выполнить.выполняется только один раз.Он вызывается автоматически перед созданием первого экземпляра или ссылками на статические элементы.

...