如何在使用 DapperExtensions 映射时指定架构?

How to specify a Schema while mapping with DapperExtensions?

我正在尝试使用 DapperExtensions 从 SQL 数据库中获取所有记录。

但是对于某些 table,我将架构设置为 dbo 以外的模式。因此,table 无法从 sql 查询中识别出来。

例如,table 的格式为 [Schema][TableName]。但是当我开始查询时,会抛出错误:

Invalid object name 'TableName'.

这是模型 class:

using System;
using Dapper.Contrib.Extensions;
using ImOnTech.Teftis.Core.Models;
using ImOnTech.Teftis.Core.Models.DT_Inspection;

namespace ImOnTech.Teftis.Core.Models.DT_Inspection
{
    [Table("DT_Inspection.City")]

    public class City
    {

这是从数据库GetAll记录的函数:

public async Task<IReadOnlyList<City>> GetAllAsync()
        {
            var CityList = await Context.Connection.GetListAsync<City>();
            Context.Connection.Close();
            return CityList.ToList();
          
        }

在映射您的模型时,要更明确一些。明确提及 Schema
以下是如何提供各种映射属性的示例。

public class Customer
{
    public int CustomerID { get; set; }
    public string Name { get; set; }
}

public sealed class CustomerMapper : ClassMapper<Customer>
{
    public CustomerMapper()
    {
        Schema("dbo");
        Table("Customer");
        Map(x => x.CustomerID).Key(KeyType.Identity);
        AutoMap();
    }
}

请注意,如果您的列名称和模型中的 属性 名称相同,则无需为每个 属性 调用 Map(我在上面所做的方式 Map(x => x.CustomerID).Key(KeyType.Identity);).相反,仅调用 AutoMap(); 属性将自动映射。

要让 Dapper Extensions 知道这些映射,请在应用程序启动时仅调用一次以下代码:

DapperExtensions.DapperExtensions.SetMappingAssemblies(new[] { Assembly.GetExecutingAssembly() });