如何在 DAL 项目中初始化地图?

How can you initialize a map in a DAL project?

我有 API 项目、DAL 项目(Class 库)、共享模型项目的简单解决方案结构。在 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 项目(Class 库)中创建了它,因为这是它需要在存​​储库中使用的地方,它会调用以获取假设。但是,我在哪里添加这个:

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

我的 DAL 项目没有 API 项目中的 'App_Start',那么如何初始化此映射?我觉得我在这里遗漏了一些明显的东西。

我目前的尝试是简单地在我创建的 QueryStore class 上使用静态构造函数来容纳我所有的小巧查询。但是,这样做似乎没有任何反应:

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

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

由于这是可重复使用的 Class 库项目,因此没有地方可以调用它。 Class 库没有入口点。你得来个把戏。

定义一些InitDal方法并将代码放入其中。调用者必须在开始使用数据访问层之前调用此方法一次。您需要通过文档、帮助文件等对调用者进行培训。这有助于将 initialization/mapping 逻辑与 DAL 代码的其余部分分开。

您在问题中提到的其他替代方案(更新 2 -- 现在已删除作为尝试回答)是在您的 class 之一上使用 static constructor。选择要实例化的 class 或在您的映射出现之前访问其静态成员。

A static constructor is used to initialize any static data, or to perform a particular action that needs to be performed once only. It is called automatically before the first instance is created or any static members are referenced.