相关疑难解决方法(0)

如何在映射时让Dapper忽略/删除字段名称中的下划线?

有很多方法可以将数据库字段名称映射到类名,但是删除下划线的最简单方法是什么?

    public IEnumerable<PersonResult> GetPerson(int personId)
    {
        using (var dbConnection = _dbConnectionFactory.Create(ConnectionStrings.ProjectXYZ))
        {
            IEnumerable<PersonResult> result =
                dbConnection.Query<PersonResult>("fn_get_person", new { personId },
                    commandType: CommandType.StoredProcedure).ToList();

            return result;
        }
    }
Run Code Online (Sandbox Code Playgroud)

表和数据库字段:

person
-------- 
person_id
full_name
Run Code Online (Sandbox Code Playgroud)

有效的类:(小巧玲珑已经忽略大写)

public class PersonResult
{    
    public int Person_Id { get; set; }
    public string Full_Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想把课程改为:

public class PersonResult
{    
    public int PersonId { get; set; }
    public string FullName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

mapping postgresql dapper

23
推荐指数
1
解决办法
5235
查看次数

我可以为dapper-dot-net映射指定DB列名吗?

有没有办法使用dapper-dot-net来使用属性来指定应该使用的列名而不是属性名?

public class Code
{
    public int Id { get; set; }
    public string Type { get; set; }
    // This is called code in the table.
    public string Value { get; set; }
    public string Description { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

无论我选择什么,我都希望能够命名我的房产.我们的数据库没有一致的命名约定.

如果没有小巧玲珑,还有其他类似的选择吗?

c# database dapper

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

小巧玲珑.映射到SQL列,列名称中包含空格

我已经成功地将今天的东西作为小沙箱/ POC项目运行起来,但似乎在一个问题上让我头疼...

题:

有没有办法让dapper映射到带有空格的SQL列名.

作为我的结果集,我有一些这样的效果.

例如:

SELECT 001 AS [Col 1], 
       901 AS [Col 2],
       00454345345345435349 AS [Col 3],
       03453453453454353458 AS [Col 4] 
FROM [Some Schema].[Some Table]
Run Code Online (Sandbox Code Playgroud)

我的班级看起来像这样

    public class ClassA
    {          
        public string Col1 { get; set; }    

        public string Col2 { get; set; }

        ///... etc
     }
Run Code Online (Sandbox Code Playgroud)

我的实现目前看起来像这样

 public Tuple<IList<TClass>, IList<TClass2>> QueryMultiple<TClass, TClass2>(object parameters)
 {
      List<TClass> output1;
      List<TClass2> output2;

      using (var data = this.Connection.QueryMultiple(this.GlobalParameter.RpcProcedureName, parameters, CommandType.StoredProcedure))
      {
           output1 = data.Read<TClass>().ToList();
           output2 = data.Read<TClass2>().ToList();
      }

      var result = new …
Run Code Online (Sandbox Code Playgroud)

c# dapper dapper-rainbow

18
推荐指数
3
解决办法
1万
查看次数

Dapper with Attributes mapping

我尝试使用列属性映射我的Id字段,但由于某种原因,这似乎不起作用,我无法弄清楚原因.我建立了一个测试项目来展示我正在尝试的东西.

首先,我得到了我的2个实体:

实体表1

using System.Data.Linq.Mapping;

namespace DapperTestProj
{
    public class Table1
    {
        [Column(Name = "Table1Id")]
        public int Id { get; set; }

        public string Column1 { get; set; }

        public string Column2 { get; set; }

        public Table2 Table2 { get; set; }

        public Table1()
        {
            Table2 = new Table2();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

和实体表2

using System.Data.Linq.Mapping;

namespace DapperTestProj
{
    public class Table2
    {
        [Column(Name = "Table2Id")]
        public int Id { get; set; }

        public string Column3 { get; set; } …
Run Code Online (Sandbox Code Playgroud)

c# system.reflection dapper

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

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.net如何创建地图

 public CodeCustomMapper()
  {

    Map(f => f.Name).Column("SName");
    Map(f => f.Name).Column("TName");
    Map(f => f.EmailID).Column("wmail");
    Map(f => f.EmailID).Column("Email");
   }
Run Code Online (Sandbox Code Playgroud)

我想为dapper.query函数创建这种映射.
请有人帮忙吗?
我想将自定义列名称映射到实体属性名称.


public class EntityBase
{
    public string CreatedBy { get; set; }
    public DateTime CreatedOn { get; set; }
}

public class Person :EntityBase
{
    public string SecurityAlias{ get; set; }
    public DateTime Identifier{ get; set; }
}

public class EntityBaseMap
{
    public EntityBaseMap()
    {
        var map = new CustomTypeMap<EntityBase>();
        map.Map("CreatingPerson", "CreatedBy");
        map.Map("CreatedDate", "CreatedOn");
        SqlMapper.SetTypeMap(map.Type, map);
    }
}

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

dapper asp.net-mvc-4

7
推荐指数
1
解决办法
5910
查看次数

Dapper:是否可以自定义特定类型的特定字段的类型映射?

假设我有这User门课:

public class User
{
    public int      ID          { get; set; }
    public string   FirstName   { get; set; }
    public string   LastName    { get; set; }
    public string   Email       { get; set; }
    public DateTime DateCreated { get; set; }
    public DateTime LastLogin   { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想将其映射到下表:

CREATE TABLE "user" (
  "ID"          int(11) NOT NULL AUTO_INCREMENT,
  "FirstName"   varchar(45) DEFAULT NULL,
  "LastName"    varchar(45) DEFAULT NULL,
  "Email"       varchar(255) NOT NULL,
  "DateCreated" int(11) NOT NULL,
  "LastLogin"   int(11) NOT NULL, …
Run Code Online (Sandbox Code Playgroud)

c# sql dapper micro-orm

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

为什么从Dapper返回的对象具有null和default属性值?

我在存储库中使用Dapper将查询结果映射到我要返回的API的DTO类型列表.一切似乎都正常工作但在查询和映射完成后,列表中填充了正确数量的对象,但所有int属性都为0,字符串为null.我在其他项目中使用了Dapper,并且从未遇到过这种情况.我还验证了数据是正确的,如果我将查询复制到SQL Management Studio,它会给我正确的数据.

这是包含自定义映射逻辑的存储库基类的构造函数.我确认这个代码很受欢迎.

static BaseRepository()
{
    SqlMapper.SetTypeMap(typeof(T),
      new CustomPropertyTypeMap(
          typeof(T), (type, columnName) => type.GetProperties()
              .FirstOrDefault(prop => prop.GetCustomAttributes(false)
                      .OfType<ColumnAttribute>()
                      .Any(attr => attr.Name == columnName))));
}
Run Code Online (Sandbox Code Playgroud)

以下是填充列表的存储库方法:

public IEnumerable<Dog> GetAll()
{
    var dogs = Db.Query<Dog>(@"SELECT Id, Name FROM Dogs");
    return dogs;
}
Run Code Online (Sandbox Code Playgroud)

这是我的目标:

[DataContract]
public class Dog
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

所以我已经确认"狗"变量被填充,但所有Id和Name元素都是0或null.以下是最终的JSON结果:

[
    {
        Id: 0,
        Name: null
    },
    {
        Id: 0,
        Name: null
    },
    {
        Id: …
Run Code Online (Sandbox Code Playgroud)

.net c# dapper

5
推荐指数
1
解决办法
3402
查看次数

Dapper.Rainbow与现有的数据库架构

我正在尝试Dapper.我喜欢到目前为止所看到的.为了做简单的CRUD,我使用Dapper.rainbow.它工作得很好.但是,仅当表具有名称为Id的标识列时,它才有效.有这样的db是有意义的,但我不能要求在数据库中更改列名只是为了使用Dapper.为了更清楚,我正在使用像Northwind Db这样的数据库.它在Id列中重复了表名.

为了处理这个问题,我更改了Dapper.Rainbow代码如下:

   public T Get(TId id,string idColumnName="Id")
        {
            return database.Query<T>("select * from " + TableName + " where               "+idColumnName+" = @id", new { id }).FirstOrDefault();
        }
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来处理这个如列映射/注释或完全不同的东西?

我读过这样的问题

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

Dapper.Rainbow VS Dapper.Contrib

(我遇到了与Dapper.Contrib类似的小问题,我会另外问一下).

更新 - 不确定答案是否适用于我的Dapper.Rainbow问题(至少,我不知道如何).

提前感谢您的帮助!

c# dapper dapper-rainbow

4
推荐指数
1
解决办法
4851
查看次数

有没有办法使用 Dapper 的一些 .Insert 扩展方法将属性映射到列名?

我在这门课上遇到了以下挑战:

Public Class MyClass
    Property Id As Integer
    Property LastName as String
End Class
Run Code Online (Sandbox Code Playgroud)

数据库中对应的数据表有如下字段: Id (int, not null) Last-Name (nvarchar(80),null)

所以我需要映射MyClass.LastNameMyClasses.Last-Name并度过一段地狱般的时光......

当我编写自定义插入查询时,一切正常,但我想使用 Dapper 扩展包之一的 .Insert 语句。

我尝试过 Dapper.Contrib,但这会忽略我使用 Dapper.FluentMap 或使用 Dapper 本身的内置方法创建的映射Dapper.SetTypeMap

我尝试了 Dapper.FastCrud,但我无法弄清楚如何为其配置映射,尽管这个 API 看起来很有前途。

任何人?

dapper dapper-extensions dapper-fastcrud dapper-contrib

2
推荐指数
1
解决办法
2599
查看次数

会员名称与班级名称相同

我有一个名为'Notes'的sql表,我需要为它添加一个Model:

public class Note
{
    public int ID { get; set; }
    public string Note { get; set; }
    public string UserName { get; set; }
    public DateTime Date { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我遇到了这个Note成员的问题,我不能说它,Note因为成员名称不能与它们的封闭类型相同,更改表也不是一个选项 - 它被另一个生产网站使用.

在项目的要求上,类名必须是一致的 - 名称应该代表sql表的单个实例,例如:Documentstable - > Documentmodel等.

基本上Note表不应该有一个Note列,但就是这样,我必须处理.

有没有办法让成员名称与使用Dapper的SQL列名称不同?

c#

-6
推荐指数
1
解决办法
101
查看次数