相关疑难解决方法(0)

使用类属性手动映射列名称

我是Dapper Micro ORM的新手.到目前为止,我能够将它用于简单的ORM相关内容,但我无法使用类属性映射数据库列名.例如:

我有如下数据库表:

Table Name: Person
person_id  int
first_name varchar(50)
last_name  varchar(50)
Run Code Online (Sandbox Code Playgroud)

我有一个名为Person的课程

public class Person 
{
    public int PersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

请注意,表中的列名与我尝试映射查询结果的数据的类的属性名不同.

var sql = @"select top 1 PersonId,FirstName,LastName from Person";
using (var conn = ConnectionFactory.GetConnection())
{
    var person = conn.Query<Person>(sql).ToList();
    return person;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用,因为列名与对象的(Person)属性不匹配.在这种情况下,我可以在Dapper中手动映射(例如person_id => PersonId)具有对象属性的列名吗?

任何线索或帮助将受到高度赞赏.

dapper

156
推荐指数
11
解决办法
10万
查看次数

Dapper中的自定义映射

我正在尝试使用带有Dapper和多映射的CTE来获取分页结果.我对重复的列感到不便; 例如,CTE阻止我使用Name列.

我想将以下查询映射到以下对象,而不是列名称和属性之间的不匹配.

查询:

WITH TempSites AS(
    SELECT
        [S].[SiteID],
        [S].[Name] AS [SiteName],
        [S].[Description],
        [L].[LocationID],
        [L].[Name] AS [LocationName],
        [L].[Description] AS [LocationDescription],
        [L].[SiteID] AS [LocationSiteID],
        [L].[ReportingID]
    FROM (
        SELECT * FROM [dbo].[Sites] [1_S]
        WHERE [1_S].[StatusID] = 0
        ORDER BY [1_S].[Name]
        OFFSET 10 * (1 - 1) ROWS
        FETCH NEXT 10 ROWS ONLY
    ) S
        LEFT JOIN [dbo].[Locations] [L] ON [S].[SiteID] = [L].[SiteID]
),
MaxItems AS (SELECT COUNT(SiteID) AS MaxItems FROM Sites)

SELECT *
FROM TempSites, MaxItems
Run Code Online (Sandbox Code Playgroud)

对象:

public class Site
{
    public …
Run Code Online (Sandbox Code Playgroud)

.net c# sql-server dapper

10
推荐指数
2
解决办法
2万
查看次数

标签 统计

dapper ×2

.net ×1

c# ×1

sql-server ×1