如何在使用 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() });
我正在尝试使用 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() });