我正在使用 Dapper.net 扩展,我希望能够检索照片对象并将“this”设置为它,而不必单独设置每个属性。实现这一目标的最佳方法是什么?在下面的代码中,它说我无法分配给“this”,因为它是只读的。
public class Photo
{
public Int32 PhotoId { get; set; }
public Guid ObjectKey { get; set; }
public Int16 Width { get; set; }
public Int16 Height { get; set; }
public EntityObjectStatus ObjectStatus { get; set; }
public PhotoObjectType PhotoType { get; set; }
public PhotoFormat2 ImageFormat { get; set; }
public Int32 CategoryId { get; set; }
public Photo(int pPhotoId)
{
Load(pPhotoId);
}
public void Load(int pPhotoId)
{
using (SqlConnection conn = new SqlConnection(Settings.Conn)) …Run Code Online (Sandbox Code Playgroud) 例如1
string sql="select * from A where time>=:begin_time and time<=:end_time";
DateTime bt = new DateTime(2013, 04, 19);
DateTime et = new DateTime(2013, 04, 20, 15, 0, 0);
conn.Query<Object>(sql,new {begin_time=bt,end_time=et}).ToList()
Run Code Online (Sandbox Code Playgroud)
查询速度慢,时间为00:00:02.2142132
例如2
string sql="select * from A where time>=to_date(:begin_time,'yyyy-mm-dd hh24:mi:ss') and time<to_date=(:end_time,'yyyy-mm-dd hh24:mi:ss')";
conn.Query<Object>(sql,new {begin_time="2013-04-19 0:00:00",end_time="2013-04-20 15:00:00"}).ToList()
Run Code Online (Sandbox Code Playgroud)
查询速度很快,时间是00:00:00.4604229
以下是一个新的测试用例。数据库中的所有测试记录数为 39。
group1:使用 Oracle.ManagedDataAccess
测试1:00:00:01.9456767。使用 dapper 并且 datetime 是 datetime 类型(eg1. :begin_time)
测试2:00:00:00.6667549。使用 dapper 并且 datetime 是字符串类型(例如2.to_date(:begin_time,format) )
测试3:00:00:01.8552286。使用 ado.net/OracleCommand/OracleDataAdapter 并且 datetime 是 datetime 类型(eg1. :begin_time)
测试4:00:00:00.0592419。使用 ado.net/OracleCommand/OracleDataAdapter 并且日期时间是字符串类型(例如2.to_date(:begin_time,format))
group2:使用 System.Data.OracleClient
测试5:00:00:00.0184799。使用 dapper …
来自 NuGet,我正在使用
...\packages\Npgsql.2.2.5\lib\net45\Npgsql.dll
...\packages\Dapper.1.42\lib\net45\Dapper.dll
在 PostgreSQL 中调用存储过程时,我需要将过程名称的大小写保留为
var x = cnn.Query<icd9>("GetDxLibrary", commandType: CommandType.StoredProcedure);
Run Code Online (Sandbox Code Playgroud)
我收到运行时错误:
Npgsql.dll 中发生“Npgsql.NpgsqlException”类型的未处理异常
附加信息:错误:42883:函数 getdxlibrary() 不存在。
如果 PostgreSQL 中的函数重命名为getdxlibrary(),一切顺利。
如何在 Dapper 中调用大小写混合名称的过程?
TIA
拜托,我可以将此方法转换为使用 Dapper 吗?
public DataTable GetLeituras ( int ultimas )
{
DataTable listaLeiturasRomaneio = new DataTable();
try
{
_sqlConnection.Open();
_sqlCommand = new SqlCommand();
_sqlCommand.Connection = _sqlConnection;
_sqlCommand.CommandText = "BuscarUltimasLeituras";
_sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
_sqlCommand.Parameters.Add("@Last", SqlDbType.Int).Value = ultimas;
_sqlAdapter = new SqlDataAdapter(_sqlCommand);
_sqlAdapter.Fill(listaLeiturasRomaneio);
}
catch ( SqlException )
{
listaLeiturasRomaneio = null;
}
finally
{
_sqlConnection.Close();
}
return listaLeiturasRomaneio;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个通用的简洁的“读取”方法。我想将返回类型作为参数传递给该方法。我不熟悉泛型,但有一个想法可以使用泛型来完成。我想它会看起来像这样?
public static T ListReader<T>(string SQL, ref T returnType, string DbName = "TEST")
{
using (IDbConnection cmd = new SqlConnection(ConfigurationManager.ConnectionStrings[DbName].ConnectionString))
{
return cmd.Query<returnType>(SQL).ToList();
}
}
Run Code Online (Sandbox Code Playgroud) 
我的 SP 返回如下数据。当我使用 dapper QueryMultipleAsync 时,它似乎只选择第二个结果集,而当使用 queryAsync 时,它只选择第一个结果集。请建议。提前致谢。
col1 col2 col3
123 name 23.34
time value
25:17.0 123
25:17.0 124
25:17.0 543
25:17.0 566
col1 col2 col3
123 name1 23.34
time value
25:17.0 123
25:17.0 124
25:17.0 543
25:17.0 566
Run Code Online (Sandbox Code Playgroud) 我在我的项目中使用带有 LINQ 和 SQL Server 的 EF 很长时间了。
我正在寻找一种方法来提高我对数据库的请求的性能。我读了很多关于 Dapper 和程序的文章,它比 EF 快。我将 Dapper 添加到项目中,我添加了程序......但我的测试显示出奇怪的结果。EF 和 Dapper 以及存储过程的结果几乎相同——没有任何好处。
首先,我检查了一个有很多 Join 的请求。我在 Dapper、Procedure 和 EF 之间得到了几乎相同的结果。然后我决定用一张没有关系的简单表做一个测试。
我有表格邮政编码。有 43200 条记录。
我使用 EF、Dapper、存储过程和 SQL Server 中的请求对 1 000 条记录、10 000 条记录和 43200 条记录进行了测试。
小巧玲珑
string query =
"SELECT TOP (43200) [Zip]\r\n ,[City]\r\n ,[State]\r\n ,[Latitude]\r\n ,[Longitude]\r\n ,[TimeZone]\r\n ,[DST]\r\n FROM [dbo].[ZipCodes]";
using (IDbConnection connection = new SqlConnection(_connectionString))
{
var result = connection.QueryAsync<ZipCodes>(query).Result.ToList();
return result;
}
Run Code Online (Sandbox Code Playgroud)
英孚
var zip = db.ZipCodes.AsNoTracking().Take(43200).ToList();
Run Code Online (Sandbox Code Playgroud)
存储过程
ALTER PROCEDURE [dbo].[ZIPTest] …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Dapper 在 Sql Server 中执行选择计数查询。当配置文件不存在时,预期响应应为 0。当我在 SSMS 中执行查询时,它会正确返回,但在使用 Dapper 的 API 中,它会返回 1。知道为什么会发生这种情况吗?
public IActionResult GetProfileCount(string profileId)
{
int profileCount = 0;
using (IDbConnection db = new SqlConnection(connectionString))
{
try
{
profileCount = db.Query($"select count(*) from Profile where Id='{profileId}'").Count();
}
catch(Exception ex)
{
Console.WriteLine($"Error retrieving count for ProfileId: {profileId}", ex.Message);
}
}
return Ok(profileCount);
}
Run Code Online (Sandbox Code Playgroud) 我正在使用 SQL,并且在我的数据库中有一个如下所示的表。
Id Remark1 Remark2 Remark3 Remark4
------------------------------------------------
1 AAA BBB CCC DDD
2 EEE FFF GGG HHH
Run Code Online (Sandbox Code Playgroud)
如何使用以下 DTO从Remark*列中获取所有值IEnumerable<string>?
class MyDTO
{
public int ID { get; }
public IEnumerable<string> Remarks { get; }
}
Run Code Online (Sandbox Code Playgroud)
注意:我正在使用 SqlKata (Dapper),您也可以在回答时使用它。
我正在使用 Dapper C# .Net Core 6.0 MVC
询问 ;
var query = $"SELECT d.Id,d.CityId,d.CountryId,UPPER(d.Name) FROM District as d INNER JOIN City as c ON d.CityId = c.Id Where c.Id={Convert.ToInt32(id)}";
var result = conn.Query<CityDto>(query).ToList();
Run Code Online (Sandbox Code Playgroud)
数据获取但d.Name值为空
当我在 SQL Server 中执行它时它起作用
我的错误在哪里?
dapper ×10
c# ×5
asp.net-core ×1
database ×1
generics ×1
linq ×1
npgsql ×1
oracle ×1
postgresql ×1
sql ×1
sql-server ×1
sqlkata ×1