首页 > 解决方案 > 如何在 DAL 项目中初始化地图?

问题描述

我有一个简单的 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 项目没有 API 项目中的“App_Start”,那么如何初始化此地图?我觉得我在这里遗漏了一些明显的东西。

我目前的尝试是简单地在QueryStore我创建的类上使用一个静态构造函数,该类包含我所有的小巧查询。但是,执行此操作时似乎没有任何反应:

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

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

标签: c#dapperdapper-fluentmap

解决方案


由于这是可重用的类库项目,所以没有地方可以调用它。类库没有入口点。你必须做一个把戏。

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

您在问题中所述的其他替代方法(更新 2 - 现在已删除以尝试回答)是在您的一个类上使用static构造函数。选择在映射出现之前被实例化的类或其静态成员被访问。

静态构造函数用于初始化任何静态数据,或执行只需要执行一次的特定操作。在创建第一个实例或引用任何静态成员之前自动调用它。


推荐阅读