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

时间:2019-06-13 09:57:03

标签: c# dapper dapper-fluentmap

我有一个简单的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类上简单地使用一个静态构造函数来容纳所有dapper查询。但是,这样做似乎什么也没发生:

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

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

1 个答案:

答案 0 :(得分:0)

因为这是可重用的类库项目,所以没有地方可以调用它。类库没有入口点。你必须要把戏。

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

您所说的另一种选择(UPDATE 2 –现在已删除,作为一种尝试)是在您的一个班级上使用static constructor。在映射进入图片之前,选择要实例化的类或访问其静态成员的类。

  

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