标签: dapper

如何使用FakeItEasy伪造泛型方法调用?

我伪造了一个IDbConnection,我想打电话给QueryOne<T>()(一个Dapper扩展名),但我NullReferenceException这样做了.

这是我的代码:

IDbConnection myConnection = A.Fake<IDbConnection>();


A.CallTo(() => myConnection.QueryOne<MyDto>(A<string>.Ignored,  <IDbConnection>.Ignored, A<IDbTransaction>.Ignored))
.Returns(new MyDto());
Run Code Online (Sandbox Code Playgroud)

是不是可以模拟泛型方法调用FakeItEasy或为什么我得到异常?

提前致谢...

基督教

generics fakeiteasy dapper

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

Sql CE与多个语句不一致

您可以使用SQL CE执行多个语句,这一直是事实.事实上,我正在使用SQL Server Compact Toolbox来做到这一点.但是,当我采用相同的多语句命令并从Dapper执行它们时......

public const string SampleDml = @"
   INSERT INTO [Plugin](Name, TypeName) VALUES ('Blog','Shroom.Blog');
   GO
   INSERT INTO [ContentDef](PluginID, Name, Placement, IsStatic) VALUES(@@IDENTITY,'MyBlog','Layout:Left',1);
   GO
";
Run Code Online (Sandbox Code Playgroud)

然后我不断收到此错误:

解析查询时出错.[令牌行号= 3,令牌行偏移= 1,令牌错误= GO]

我正在使用的SQL CE库的版本是版本4.0.0.0(运行时版本v2.0.50727).我正在使用Dapper 1.12.0.0(运行时版本v4.0.30319)和Dapper Extensions 1.3.2.0(运行时版本v4.0.30319).

SQL CE库看起来像是错误的运行时,但是Web平台安装程序说我有最新的(所以这真的是最新的?).思考?

sql-server-ce dapper

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

使用Dapper.NET修剪字符串

我已经使用Dapper.NET了一段时间了.我只是想知道是否有可能让Dapper修剪字符串,因为它将它们分配给对象的属性.

我目前LTRIM(RTRIM(fieldname))在SQL和/或value.Trim()属性设置器中使用.

然而,我正在使用使用chars而不是varchar的遗留数据库,我想知道是否有办法减少我必须修剪所有内容的时间.

我通过编辑dapper的源代码自己去了,但最终打破了其他映射等所以放弃了.

只是想知道是否有人有任何可以减少这种开销的建议.(我可能会遗漏一些非常简单的东西!)

顺便说一句,我正在使用C#3.5.

c# sql dapper

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

指定的Cast不是无效的(Enum with int value,Dapper)

我有一个用户角色(简单,第一次切割)实现的类:

class User { 
  public Role Role { get; set; }
  // ...
  public User() { this.Role = Role.Normal; }
  public void Save() { Membership.CreateUser(...) } // System.Web.Security.Membership
} 

enum Role : int {
  Invalid = 0,
  Normal = 1,
  SuperUser = 4096
}
Run Code Online (Sandbox Code Playgroud)

在添加角色之前,一切正常(如果这很重要).

现在,当我尝试获取用户时,此行失败:

toReturn = conn.Query<User>("SELECT TOP 1 * FROM dbo.UserProfile WHERE 1=1");
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪(来自ELMAH):

System.Data.DataException: Error parsing column 2 (Role=1 - Int16) ---> System.InvalidCastException: Specified cast is not valid.
   at Deserialize06df745b-4fad-4d55-aada-632ce72e3607(IDataReader )
   --- End of inner exception …
Run Code Online (Sandbox Code Playgroud)

dapper

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

dapper是否支持.net数据集

在我看来,dapper.query对象有一个datareader,对于dapper.Execute有一个ExectureNonQuery对象.如果我错了,请纠正我.

我们可以将dapper用于返回多个表的数据集吗?

dapper

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

Dapper:找不到方法:'System.Collections.Generic.IEnumerable`1 <!! 0> GridReader.Read(Boolean)'

我正在寻找为Dapper交换一些EF代码优先的数据库请求,以加速我们网站的一些缓慢部分.我刚刚开始尝试,而Dapper看起来很好.

我已经成功转换了一些代码以使用.Query扩展.但是现在我正在尝试.QueryMultiple,然后使用.Read扩展来获取每个结果集.

我试图将Dapper代码移动到一个新项目中,以使其远离我的MVC项目,并且.Query的东西很好.但是当我尝试使用.QueryMultiple访问一个方法时,在它甚至命中代码中的任何断点之前我都会收到错误:

Method not found: 'System.Collections.Generic.IEnumerable`1<!!0> GridReader.Read(Boolean)'.
Run Code Online (Sandbox Code Playgroud)

如果我将代码移动到Web项目中,它可以正常工作.

我无法弄清楚我需要什么或缺少什么.Visual Studio和ReSharper看起来很开心.它正在编译.这只是一个运行时问题.这两个项目都针对.Net 4.5,两者都有对Dapper的nuget引用.Dapper项目设置为Win C#类库.我已经查看了SqlReader.cs的源代码,它似乎没有任何'使用',我还没有.我相信System.Collections.Generic是自动包含的,并且在添加引用对话框中似乎无法选择.

我觉得我错过了一些非常非常明显的东西......

这是代码:

        using (var conn = new SqlConnection(ConnectionString))
        {
            conn.Open();

            // TODO: Add in checks
            const string query = @"
            SELECT * FROM FileCollections WHERE Id = @fileCollectionId
            SELECT * FROM Files f WHERE FileCollection_Id = @fileCollectionId
            SELECT * FROM ExternalLinks WHERE FileCollection_Id = @fileCollectionId
            ";

            // return a GridReader
            using (var result = conn.QueryMultiple(query, new {fileCollectionId}))
            {
                var fileCollection = result.Read<FileCollection>().Single();
                var files = result.Read<File>().ToList();
                fileCollection.Files …
Run Code Online (Sandbox Code Playgroud)

.net generics asp.net-mvc c#-4.0 dapper

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

Glimpse ASp.NET和Dapper.NET

任何人都可以对Gapmpse与Dapper的使用有所了解,还是纯粹只是为了Entity Framework?

编辑

 public List<UserRole> GetUserRoles(string userName)
    {
        using (var block = new TransactionBlock())
        {
            const string sql = "SELECT AspNetRoles.Name FROM AspNetUsers INNER JOIN " +
                               "AspNetUserRoles ON AspNetUsers.Id = AspNetUserRoles.UserId INNER JOIN " +
                               "AspNetRoles ON AspNetUserRoles.RoleId = AspNetRoles.Id " +
                               "WHERE (AspNetUsers.UserName = @userName)";
            var results = TransactionBlock.Connection.Query<UserRole>(sql, new{userName}, transaction: TransactionBlock.Transaction).ToList();
            block.Commit();
            return results;
        }
    }
Run Code Online (Sandbox Code Playgroud)

*编辑*

public class TransactionBlock : IDisposable
{
    private bool m_FirstTransactionBlock = false;
    private bool m_Disposed = false;

    public TransactionBlock(string connectionStringConfigKey …
Run Code Online (Sandbox Code Playgroud)

glimpse dapper

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

DAL与小巧玲珑和C#

我有一个利用Dapper的数据访问层,但不禁觉得它可以更加优雅.DAL只是传递参数并根据模型的命名响应映射模型,因此该部分至少是直接的,但我讨厌看起来重复的代码.

这是一个例子

 public IEnumerable<Product> ProductSearch(int? userId, DateTime?      modifiedAfter, DateTime? modifiedBefore, Guid? productId)
    {
        IList<Product> products;

        using (var connection = _connection.OpenConnection())
        {
            const string sproc = "dbo.stp_Product_Search";

            products = connection.Query<JobProduct>(sproc, new
            {
                User_ID = userId,
                Modified_After = modifiedAfter,
                Modified_Before = modifiedBefore,
                Product_ID = productId
            }, commandType: CommandType.StoredProcedure)
            .ToList();
        }
        return products;
    }
Run Code Online (Sandbox Code Playgroud)

我有很多这样的代码,但使用了不同的参数和实体.有没有人有任何好的例子?

c# dapper

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

C#Dapper QueryAsync到ValueTuple没有正确映射

我正在使用dapper和C#7 ValueTuples(已安装的nuget)执行以下查询:

await connection.QueryAsync<(int, Guid)>(
                $@"SELECT tenant, pid FROM Table 
                ORDER BY id
                OFFSET {skip} ROWS 
                FETCH NEXT {dbBatchSize} ROWS ONLY");
Run Code Online (Sandbox Code Playgroud)

它返回0和Guid.Empty的列表.

如果我只使用int或只使用Guid它可以正常工作

我还尝试根据表中的列命名ValueTuple:

await connection.QueryAsync<(int tenant, Guid pid)>("...")
Run Code Online (Sandbox Code Playgroud)

结果相同.

有人有任何提示吗?提前致谢!

c# dapper c#-7.0

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

从Dapper / PostgreSQL返回插入的项目的UUID

我的ASP.Net Core 2.1 Web API项目中有一个模型对象,如下所示:

public class Tenant
{
    public Guid Id { get; set; }
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并且正在像这样在postgres中执行插入:

public async Task<int> CreateItem(Tenant item)
{
    return await db.ExecuteAsync($@"INSERT INTO tenants (Name) VALUES (@Name)", item);
}
Run Code Online (Sandbox Code Playgroud)

我需要Guid来驱动后续逻辑。它返回受影响的行(1)。我的研究表明,有一些技巧可用于获取自动增量ID(例如使用“ MAX”等)。

有没有办法做到这一点,最好是通过dapper?还是我需要退回到ADO.Net?

c# postgresql dapper asp.net-core

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