标签: dapper

Dapper micro ORM,数据库不可知和MySql Guid类型

我在一个宠物项目上试验Dapper.我使用SQLite运行所有测试和MySql进行"生产".但是我不确定如何最好地使用Dapper来处理数据库不可知的情况.

我遇到的特殊问题是MySql 不支持主键的Guid类型,因此我使用varchar(40)作为类型(SQLite支持唯一标识符,这是一个guid).所以如果我有一个通用的存储库,问题就出现了,我在尝试从MySql数据库中选择时会遇到麻烦.因为Id属性的类型是Guid,Dapper将抛出" Error parsing column 10 ",因为varchar类型与guid类型不匹配.

如果我将Id属性从guid更改为int,那么GetById中的原始sql会更加棘手,我不知道如何编写.它将类似于:1.启动事务,2.插入,3.选择最后插入的id并返回它.所以如果数据库类型是mysql,那么我将继续使用,然后使用last_insert_id,或者如果它是sqlite,那么使用last_insert_rowid?因为原始sql语法在数据库与数据库之间会有很大差异......

public IEnumerable<T> GetById(Guid id) //convention: Id is always of type Guid.
{
  return UnitOfWork.DbConnection.Query<T>(
      string.Format(
        "select * from {0} where Id = @Id", typeof (T).Name), new {Id = id});
}
Run Code Online (Sandbox Code Playgroud)

其他示例是限制返回的行数(特别是对于分页)等等.那我怎么用dapper编写数据库无关的原始sql查询?也许在我的情况下Dapper不合适?也许我应该在这里使用相同的旧NHibernate.有什么建议?我做错了吗?谢谢!

c# mysql sqlite orm dapper

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

使用Dapper从MySql映射Date字段时出现InvalidCastException

我刚刚开始使用Dapper访问MySql数据库,在处理日期字段时似乎遇到了问题.每当我尝试映射MySql日期类型字段时,我都会收到无效的强制转换.似乎MySql连接器返回一个MySqlDateTime类型,导致Dapper将其强制转换为Object而不是日期时间.这是相关的代码

我的模型上的属性定义

public DateTime PickupDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

MySql中的字段定义

PickupDate DATE
Run Code Online (Sandbox Code Playgroud)

抛出异常

System.Data.DataException : Error parsing column 1 (PickupDate= - Object)
----> System.InvalidCastException : Specified cast is not valid.
Run Code Online (Sandbox Code Playgroud)

我知道它一定是我遗漏的东西,任何人都可以指出我正确的方向,我需要做些什么才能让这个领域的Dapper映射到DateTime数据类型?

.net c# mysql dapper

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

小巧玲珑的传递动态的参数

我目前正在为Dapper编写包装器.此包装器强制每个查询都是存储过程.

在我的包装器中,我正在调用Dapper(带问题):

public IEnumerable<T> Select<T>(string storedProcName, dynamic param) {
    IEnumerable<T> results;

    using(var connection = new SqlConnection(_connectionString) {
        results = connection.Query<T>(storedProcName, param, commandType: CommandType.StoredProcedure);
    }

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

当我尝试将"param"传递给Query时,它告诉我"无法解析符号查询".当我删除param pass时,它工作正常.

任何人都可以指出我正确的方向,以便我可以将动态参数(或类似的东西)传递给Dapper吗?

c# orm dapper

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

如何使用精巧的orm执行批量操作?

我在项目中有dapper orm,我在数据库中保存了数据(1200000row),但在与dapper的事务中,我想要fast.with nhibernate(session statetless)很慢.我认为短小精悍是快速的,因为获取数据(700000)与nhibernate在33秒,与9秒的精巧.

怎么解决问题?

我的代码是:

IDbTransaction trans = connection.BeginTransaction();
connection.Execute(@"
    insert DailyResult(Id, PersonId,DateTaradod,DailyTaradods)
    values(@Id, @PersonId,@DateTaradod,@DailyTaradods)", entity, trans);                                    
trans.Commit();
Run Code Online (Sandbox Code Playgroud)

orm batch-file bulk dapper

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

有关于短小精悍的文件吗?

是否有任何适当的文件,书籍或网站,我可以从中详细了解小巧玲珑.或者一些教程完全解释了dapper中的方法

orm dapper

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

Dapper返回单个值

我想执行此简单测试以查看表是否存在。我认为根据表是否存在返回一个int值会很容易。

以下是我尝试过但不起作用的内容:

result = connection.ExecuteScalar<int>(@"
IF (EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = '@tableSchema' 
                 AND  TABLE_NAME = '@tableName'))
    RETURN 0;


RETURN 1;
", new { tableSchema, tableName });
Run Code Online (Sandbox Code Playgroud)

错误信息:

具有返回值的RETURN语句不能在此上下文中使用。

真的很点头...

c# t-sql dapper

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

使用自定义类转换IEnumerable <dynamic>

我最近一直在使用dapper,并希望制作一个动态方法,以便更容易用sql选择.这是我的代码:

类:

public class Method
{
    public static IEnumerable<dynamic> QueryAll(string table)
    { 
        dynamic dyn = table;
        SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DbCon"].ToString());
        using (con)
        {
            string sql = String.Format("SELECT * FROM {0}", table);
            IEnumerable<dynamic> ie = con.Query<dynamic>(sql, null);
            return ie;
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

这里叫功能:

IEnumerable<posts> = Method.QueryAll("posts");
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误that I cannot convert IEnumerable dynamic to IEnumerable Models.Posts.

我该怎么做才能让它发挥作用.

c# ienumerable casting dapper

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

Dapper列到F#选项属性

如何让Dapper将数据转换为带有option属性的F#类型?简单的例子:

type SomeType = {
    Count : int option
}

connection.QueryAsync<SomeType>(...)
Run Code Online (Sandbox Code Playgroud)

抛出:

System.InvalidOperationException
    A parameterless default constructor or one matching signature
    (System.Int32 count) is required for SomeType materialization
Run Code Online (Sandbox Code Playgroud)

使用Nullable而不是选项工作:

type SomeType = {
    Count : Nullable<int>
}
Run Code Online (Sandbox Code Playgroud)

但由于各种原因,它并不理想.首先,我有我使用的情况string option(因为F#通常不允许空分配,这很好),并且Nullable<string>不编译.有没有办法配置/指示Dapper自动处理option类型?我想避免每次都使用自定义映射.

如果重要,请使用Npgsql.

f# optional dapper

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

使用Dapper从T-SQL存储过程返回XML字符串

我正在开发一个将大型VB6应用程序转换为.NET的项目.我决定创建一个项目来为现有的VB6 ADO代码提供一个外观,我使用了令人惊奇的Dapper扩展方法来处理VB6 ADO函数用来做的所有数据库代码.

我必须在我的新项目中支持的功能之一是能够从T-SQL存储过程(通过FOR XML)获取XML字符串结果.Dapper没有支持返回我能看到的XML.所以,我实现了ADO.NET ExecuteXmlReader方法来提供这种返回.我的项目还使用Dapper DynamicParameters来捕获存储过程所需的所有输入/输出参数.

我没有看到怎么做,是如何转换DynamicParameters为,SqlCommand.SqlParameterCollection以便我可以将这些参数填充到方法的SqlCommand对象中ExecuteXmlReader.我还必须支持此方案的输出参数.

我可以遍历DynamicParameters,但只能获取参数名称和值.我还需要方向,类型,大小,比例和精度.Dapper有一个DynamicParameters.ReplaceLiterals方法,它接受一个IDbCommand对象来替换SQL字符串中的文字.我希望它有一个方法来填写参数.

我错过了一些明显的东西吗?如果我调用Dapper Execute方法,我可以DyanmicParameters直接将其传递给此方法.我只是没有看到如何将它们传递给SqlCommand对象.

c# xml ado.net dapper

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

如何使用Dapper映射DBNull值?

我正在使用Dapper并执行以下查询,该查询已映射到type列表MyObject。默认映射器的问题是int我的表(INOUT)中有一个可为空的字段,其中包含整数值。一个可能的值是NULL,它将被映射为整数0。如何防止这种情况?我必须知道INOUT是NULL还是0。

public List<MyObject> GetSomething()
{
    using (IDbConnection db = GetOpenConnection())
    {
        return db.Query<MyObject>("Select * from tbl_foo").ToList<MyObject>();
    }
}

public class MyObject
{
    public int INOUT { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

c# dapper

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

标签 统计

dapper ×10

c# ×7

orm ×4

mysql ×2

.net ×1

ado.net ×1

batch-file ×1

bulk ×1

casting ×1

f# ×1

ienumerable ×1

optional ×1

sqlite ×1

t-sql ×1

xml ×1