标签: dapper

Dapper F# - 无参数默认无参数默认构造函数或一个匹配的签名

出于演示目的,我正在制作一个插入函数,我想返回传入类型的变量。

我是初始查询的用户 Dapper.fsharp,然后我想运行原始 SQL 查询来获取最后插入的值。

所以我有这样的东西用于演示目的

let Insert<'a> asyncQuery =
    asyncQuery
        |> connection.InsertAsync<'a>
        |> RunSynchronously
        |> ignore
    (*This is a Dapper.fsharp query. Running this returns the number of rows inserted (int) *)

    let table = asyncQuery.Table (*This is a string*)
    let result = 
          connection.Query<'a>($"""Select * From {table} Where id = (select last_insert_id())""") (*Should return an IENumerable of type 'a*)
          |> EnumerableToArray
           
    result |> first

Run Code Online (Sandbox Code Playgroud)

然后这就是所谓的

let newSession =
            insert {
                table "sessions"
                value newSession
            } |> Insert

Run Code Online (Sandbox Code Playgroud)

其中 newSession 是会话类型 …

f# dapper

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

使用 mySQL 将 int 列表传递给 dapper

我有一个当前的工作解决方案,正在为列表中的每个项目 Id 执行新的数据库调用,并且我正在尝试执行单个调用,而不是从多个项目返回数据。

为此,我尝试将项目 ID 列表传递到访问 MySQL 数据库的 Dapper 查询中。我要么收到操作数应包含 1 列的错误,要么收到第一个结果,而不是数据库中每个 projectId 的结果。我当前使用的 c# 代码是

public List<ProjectPortalManager> GetPPTech(IEnumerable<int> projIds)
{
 string sql = @"SELECT tProject.ProjectID, 
                       tProject.ProjectName, 
                       tProject.PMUserID, 
                       if(cast(tproject.dateinit as char) = '0000-00-00 00:00:00',null,tproject.dateinit) as DateInit,
                       tproject.comments, 
                       tproject.ProjectNumber,
                       c.LName, 
                       c.FName, 
                       c.orgid, 
                       c.orgname as organization, 
                       c.Email, 
                       c.Phone 
                From tProject left Join tContacts c on tProject.PMUserID = c.UserId
                Where tProject.ProjectID in (@ProjIds);";
            try
            {
                List<ProjectManager> pms = Conn.Query<ProjectManager>(sql, new { ProjIds = new[] { projIds } }).ToList();
                return pms;
            }
            catch (Exception …
Run Code Online (Sandbox Code Playgroud)

c# mysql database mysql-workbench dapper

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

在使用子对象列表读取对象时,需要无参数的默认构造函数来允许dapper实现错误

我有这个:

public class object_a
{
    public int ta_Id { get; set; }
    public string ta_Label { get; set; }
    public IEnumerable<table_c> SomeName { get; set; }
}

public class table_b
{
    public int Id {get;set;}
    public int SomeId {get;set;}
    public int FK_A {get;set;}
}

public class table_c
{
    public int Id {get;set;}
    public int Max {get;set;}
    public string Label {get;set;}
    public int FK_A {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

使用Dapper我检索object_a包含任意数量子对象的列表table_c

using (System.Data.SqlClient.SqlConnection sqlConnection = new System.Data.SqlClient.SqlConnection(_con))
{
        sqlConnection.Open();
        var sql = …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc-3 dapper

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

Dapper Extensions - 更改主键字段

我们正考虑从EF切换到Dapper.我想使用Dapper Extensions填充我的实体,如:

UserInstance = conn.Get(UserProfile)(RecordID)
Run Code Online (Sandbox Code Playgroud)

我们所有的主键列都命名为RecordID,但前面是Parent_RecordID.Get尝试使用Parent_RecordID作为我的主键列,"如果多个属性以Id结尾,Dapper Extensions将使用第一个Id属性作为主键."

我该如何更改它,以便它将RecordID作为我的主键仅查找每个表?我知道我可以为实体创建自己的映射器,但我希望这个更改适用于每个表(其中有100个),而不是为每个表创建一个映射器.

dapper

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

可以小巧的取代表名吗?

我原本以为dapper-dot-net可以在这样的查询中替换表名:

connection.Query("SELECT * FROM @Table WHERE [Id] = @Id", new {Table = tb, Id = id});
Run Code Online (Sandbox Code Playgroud)

但是,它似乎不会取代表名.这是预期的限制吗?

c# dapper

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

Dapper可以处理动态列标题

我有一个存储过程总是返回一个字符串列表.但是,根据传递给存储过程的参数,字符串列表的列标题将更改.Dapper能够处理这个吗?如果是这样,应该如何处理?

                conn.Open();
                var p = new DynamicParameters();
                p.Add("Search_Function_CD", searchFunction, DbType.String, ParameterDirection.Input);
                p.Add("Search_Value", searchValue, DbType.String, direction: ParameterDirection.Input);
                p.Add("o_resultset", dbType: DbType.Object, direction: ParameterDirection.Output);
                var Results = (IDictionary<string, object>)conn.Query(sql: CommonConstants.ProcedureConstants.PKG_GET_SEARCH_RESULTS, param: p, commandType: CommandType.StoredProcedure);
                foreach (object o in Results)
                {
                    string element = Results.Values.ElementAt(1) as string;
                    searchResults.Add(element);
                }
                conn.Close();
                return searchResults;
Run Code Online (Sandbox Code Playgroud)

dapper

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

从Char映射到布尔值

我们将Dapper用作旧版Informix数据库的ORM,并且在该数据库中,布尔字段实际上存储为Char,其中“ F”表示False,“ T”表示True。

在我们的POCO中,我们希望公开一个布尔值属性,并指示Dapper在读写数据库时映射到相关char值/从相关char值映射。

例如:

假设我们在名为“活动”的表中有一个字段。数据库中“活动”列的值将是“ F”的“ T”

我们的POCO可能如下所示:

public class MyTable
{
    public bool Active { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

是否可以在Dapper中创建一个自定义映射,对于该列,如果基础值是“ T”,则该列将POCO中的Active属性设置为true;如果是“ F”,则将false设置为false?

我知道可以解决此问题的一种方法是拥有两个属性,一个是Dapper可以直接映射到的字符串,另一个是POCO的使用者使用的布尔值。即:

public class MyTable
{
    public string Active { get; set; }
    public bool MyActive 
    {
        get { return Active == "T"; }
        set { Active = (value == "T"); }
    }
}
Run Code Online (Sandbox Code Playgroud)

这种方法的缺点是必须维护两个属性,所以如果有一种方法可以扩展dapper来为我完成此操作,那将是一个很好的选择(特别是因为数据库表中有很多类似这样的字段) 。

我已经看过实现自定义类型映射的方法,但是尽管这对自定义复杂类型有效,但是我不确定当我想从一种基本类型映射到另一种基本类型时,它如何在这种情况下工作。

c# dapper

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

传统的sql方法VS ORM

我真的很沮丧地搜索这个答案,哪个更好 - 传统的System.Data.SqlClient方法或使用任何ORM,如EF或Dapper我通过许多链接看到了很多比较,有些是:

  1. https://github.com/StackExchange/dapper-dot-net 在此输入图像描述

  2. http://www.dontpaniclabs.com/blog/post/2014/05/01/speed-comparison-dapper-vs-entity-framework/

  3. ORM与传统的数据库查询,这是他们的领域?

我能理解的一件事是,手写的传统sql代码在性能上优于任何其他方法.但是我仍然想到,如果我们已经拥有最好的方法,那么ORM为什么呢?

是否只是因为我们想减少DataLayer代码?或者我们不想管理我们的数据库,并希望在我们的c#代码中编写所有内容(代码/数据优先)

为什么EF被引入,如果只有代码管理是问题那么,为什么以及我们如何妥协查询执行的性能和速度,甚至ORM都有限制.

请回答我的问题,如果需要任何编辑,请告诉我.

我唯一担心的是网站的速度和性能.

提前致谢.

c# sql orm entity-framework dapper

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

Mvc核心在ExternalLoginSignInAsync之后获取UserId

我通过以下方式通过第三方(例如Google)登录用户:

var info = await _signInManager.GetExternalLoginInfoAsync();
var result = await _signInManager.ExternalLoginSignInAsync(info.LoginProvider, info.ProviderKey, false);
Run Code Online (Sandbox Code Playgroud)

上面的内容由于存在而应该成功,如何捕获登录用户的userId?userId是位于我的数据库中Users表上的userId,它不会来自第三方登录提供程序。

这可能吗?我现在似乎找不到任何可以让我检索它的函数或对象。我以为可能是从User Object中获取的,但是据我的理解,它来自HttpContext,在此时,该用户将不会具有已登录的用户身份,至少直到刷新页面后才如此。我也想避免仅出于此目的重定向到另一个页面。

注意:我正在使用Dapper,并且在我的项目中没有EF的痕迹。不知道这有多重要。

c# asp.net-mvc dapper asp.net-identity asp.net-core-mvc

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

SQL Server存储过程等待参数

我有一个SQL Server存储过程:

exec GetBob @id=3
Run Code Online (Sandbox Code Playgroud)

但是当我在函数中调用此存储过程时,我收到错误:

过程或函数需要@id参数

但是@id正确的参数(获取值).

public List<Bob> GetBob(int id)
{
    try
    {
        connection();
        con.Open();

        DynamicParameters param = new DynamicParameters();
        param.Add("@id", id);

        IList<Bob> EmpList = SqlMapper.Query<Bob>(con, "GetBob", param).ToList();
        con.Close();

        return EmpList.ToList();
    }
    catch (Exception)
    {
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

sql-server asp.net-mvc dapper

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