2

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

但是我有一个模式设置为除了dbo某些表之外。因此,无法从 sql 查询中识别该表。

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

无效的对象名称“表名”。

这是模型类:

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();
          
        }
4

1 回答 1

2

在映射模型时,请更加明确。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() });
于 2021-07-13T13:59:06.777 回答