标签: dapper

是否有相当于Dapper.Net和Dapper.Net扩展的"NotMapped"?

我已经开始玩Dapper.Net了,到目前为止我真的非常喜欢它 - 但是,我遇到了一个问题.

假设我有一个POCO类:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FullName { get { return FirstName + " " + LastName; } }
}
Run Code Online (Sandbox Code Playgroud)

现在,使用Dapper.Net和Dapper.Net扩展,我想通过这样做简单地从DB加载该数据类型的所有实例:

string connectionString = CloudConfigurationManager.GetSetting("DBConnection");
using (SqlConnection cn = new SqlConnection(connectionString))
{
    cn.Open();

    IEnumerable<Types.Person> entities = cn.GetList<Types.Person>();
    var forceMe = entities.ToList();
}
Run Code Online (Sandbox Code Playgroud)

这在Linq设置中运行良好,但是当它使用强制评估的.ToList()命中行时,它会在FullName上以"无效列名"爆炸.考虑到它可能会尊重NotMapped的Entity Framework DataAnnotations内容,我尝试添加NotMapped属性(在向项目添加EF 5之后).这没用.

所以,问题是,如何告诉Dapper.Net数据库中没有预期的列?这是扩展的问题,试图为它在模型POCO中看到的所有内容映射数据库列吗?我是否需要恢复编写SQL,并明确询问我想要的列,或者是否有办法在列上获得等效的NotMapped?

提前致谢.

-亚当

dapper micro-orm

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

dapper rainbow MissingMethodException

为什么我会得到这个例外?代码不一样,但接近'demo'https://gist.github.com/1599013

例外:MissingMethodException

说明:

找不到方法:'System.Collections.Generic.IEnumerable 1<System.Object> Dapper.SqlMapper.Query(System.Data.IDbConnection, System.String, System.Object, System.Data.IDbTransaction, Boolean, System.Nullable1,System.Nullable`1)'.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using Dapper;
using System.Data.SqlClient;
using MySql.Data.MySqlClient;

namespace daconsole2
{
    class Program
    {
        class Product
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Description { get; set; }
            public DateTime? LastPurchase { get; set; }
        }

        // container with all the tables
        class MyDatabase : Database<MyDatabase>
        {
            public …
Run Code Online (Sandbox Code Playgroud)

c# dapper dapper-rainbow

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

使用精巧和小数的无效演员表(10,2)

以下代码给出了无效的强制转换操作.我的MS Sql服务器中的Qty列是类型decimal(10,2)

#region SQL Syntax

var sql = "select qty from productarticle where articleid=@articleid and productid=@productid";

#endregion

using (IDbConnection cn = Connection)
{
    cn.Open();

    return cn.Query<double>(sql, new { articleid = articleid, productid = productid }).Single();
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试将其归还int,则没有问题.任何线索?

c# sql-server-2008 dapper

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

Dapper按参数排序

这是这个问题的后续行动:

小巧玲珑

由于参数化在Dapper的order by子句中不起作用,所以建议的方法是保留bobby表吗?Dapper是否提供了一些清理这些参数的方法,或者是否有推荐的正则表达式等.

parameters sql-order-by dapper

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

dapper.net多重删除问题

我正在尝试从ac#class中的两个不同的vairables中删除两个表,但是我收到以下错误消息:

使用多映射API时,如果您具有Id参数名称以外的键,请确保设置splitOn参数:splitOn

通过SQL事件探查器捕获命令时,sql语句执行正常,所以我很难过.

精巧的代码是:

 public void DeleteListCode(string listCodeId)
    {
       using (var block = new TransactionBlock())
       {
           // Get the code first
           const string sql = "SELECT ListCode from ListCodes WHERE id =@listCodeId";
           var code = TransactionBlock.Connection.Query<string>(sql, new {listCodeId}, TransactionBlock.Transaction)
              .FirstOrDefault();

           if (string.IsNullOrEmpty(code)) return;

           const string sql2 = "delete from Lists WHERE ListCode = @code " +
                               "delete from ListCodes where Id = @listCodeId";

            TransactionBlock.Connection.Query(sql2, new {listCodeId, code}, TransactionBlock.Transaction);
           block.Commit();
       }
    }
Run Code Online (Sandbox Code Playgroud)

我已成功设法使用多选语句,但这在我使用两个自治参数的意义上略有不同.

c# dapper micro-orm

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

你能说出为什么DapperExtension的Update方法无法执行吗?

我正在使用SQLite,Dapper和DapperExtensions,这些都是最新的NuGet.

这是我的表的架构......

CREATE TABLE `LibraryInfo` (
    `Id`    INTEGER NOT NULL,
    `Name`  TEXT NOT NULL CHECK(length ( Name ) > 0),
    `Description`   TEXT,
    `Version`   TEXT NOT NULL CHECK(length ( Version ) > 0),
    PRIMARY KEY(Id)
);
Run Code Online (Sandbox Code Playgroud)

在其中我有一行包含以下数据

Id ="0"
Name ="Test Library"
Description ="这是测试库"
Version ="1.2.3.4"

这是我桌上的POCO ......

public class LibraryInfo
{
    public int    Id          { get; set; }
    public string Name        { get; set; }
    public string Description { get; set; }
    public string Version     { get; set; }
} …
Run Code Online (Sandbox Code Playgroud)

c# sql sqlite dapper dapper-extensions

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

使用Dapper for .NET Core返回输出参数

当我DynamicParamters从模板对象创建时,我在努力使用Dapper将输出参数正确映射回对象。

var parameters = new DynamicParameters(entity);
parameters.Add("@Id", dbType: DbType.Int32, direction: ParameterDirection.Output);
parameters.Output(entity, x => x.Id);             

await conn.ExecuteAsync(
   "TodoItemInsert", entity, 
    commandType: CommandType.StoredProcedure);  
Run Code Online (Sandbox Code Playgroud)

我希望上面的代码可以将生成的ID映射回我最初创建参数的实体中。无论我尝试什么,我都无法获取要从存储过程返回的参数。调用parameters.Get<int>("@Id")会引发KeyNotFoundExceptionparameters.Get<int?>("@Id")返回null。

我的SQL是一个非常基本的插入程序

ALTER PROCEDURE [dbo].[TodoItemInsert]
    @Name VARCHAR(255)
    , @Description VARCHAR(512)
    , @DueDate DATETIME = NULL
    , @IsComplete BIT = 0
    , @Id INT OUTPUT 
AS

INSERT INTO
    [TodoItems]
(
    Name
    , Description
    , DueDate
    , IsComplete
)
VALUES
(
    @Name
    , @Description
    , @DueDate
    , @IsComplete
)

SET @Id = SCOPE_IDENTITY() …
Run Code Online (Sandbox Code Playgroud)

dapper .net-core

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

在Linq操作之前,Dapper是否从数据库请求完整对象?

我一直很好奇Dapper(或许其他ORM)在与LINQ结合时如何处理对象检索.

如果我有这样的课程:

public static IEnumerable<SitePage> GetAll()
{
    using (IDbConnection cn = new SqlConnection(g.Global.CONX))
    {
        cn.Open();
        return cn.GetAll<SitePage>();
    }
}
Run Code Online (Sandbox Code Playgroud)

我构建一个这样的查询:

var result = SitePage.GetAll().Select(c=> new { c.id, c.PageUrl, c.ParentId });
Run Code Online (Sandbox Code Playgroud)

我很好奇,如果在后台,整个记录集被拉入包括所有其他列(可能包含非常大的varchars),或者Dapper是否从这个查询中理解只是为了从sql db中提取我请求的列?我意识到它有点像新手,但我想更好地理解Dapper/LINQ交互.

这里发布了一个类似的问题:选择特定列 - 使用linq-what-gets-transferred,但我不确定是否已经完全回答.海报有2个问题,也没有使用我通常喜欢的lambda表达式.

对此的回答将使我的思绪发火(并且很可能改变我编码的方式,因为我一直谨慎并且觉得我通过显式sql编写了太多代码).

linq sql-server dapper dapper-contrib

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

使用ToList进行异步,等待和任务

我试图学习如何使用await和async.

我有一个服务层,它有一个参考数据管理器.我的界面是:

public interface IReferenceDataService
    {
        Task<List<ReferenceItemDto>> GetAsync(ReferenceTypes type);
    }
Run Code Online (Sandbox Code Playgroud)

当我尝试在UI中获取数据时,我这样做:

    model.DeptPaymentTypes = _refDataService.GetAsync(Enums.ReferenceTypes.DeptPaymentTypes)
       .Select(x => new SelectListItem { 
          Text = x.Description, 
          Value = x.Id.ToString() })
        .ToList();
Run Code Online (Sandbox Code Playgroud)

但是我得到一个错误,"ToList不是Task <...的定义"

我的数据层调用使用Dapper QueryAsync获取数据...

 public async Task<List<ReferenceItemDto>> GetAsync(Enums.ReferenceTypes type)
        {
            var table = string.Empty;

            if(type == Enums.ReferenceTypes.DaysOfMonth)
            {
                var days = new List<ReferenceItemDto>();
                for (int i = 1; i <= 31; i++)
                {
                    days.Add(new ReferenceItemDto
                    {
                        Description = i.ToString(),
                        Id = i
                    });
                }
                return days;
            }


            switch (type)
            {
                case Enums.ReferenceTypes.SnowballTypes:
                    table …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous async-await dapper

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

如何在C#中将select count()用作...

我正在使用数据库制作一个简单的登录页面。因此,对于我的查询,我使用的是Dapper,但我坚持以下查询。

connection.Execute(@"SELECT count(Id) as Id FROM tblMedewerkers 
where Naam = @Naam and Paswoord = @Paswoord",
new{
 Naam = naam,
 Paswoord = paswoord
  }); 
Run Code Online (Sandbox Code Playgroud)

因此,如果“ count(Id)as Id”部分返回1,则登录正确。如果返回0,那就错了。

但是,如何从“ count(Id)as Id”中获取数据以进行处理呢?

c# sql dapper

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