Tag: dapper

asp.net mvc核心如何返回Json查询

首先,我知道如何通过执行此操作返回Json查询 public JsonResult streams() { using (var conn = new NpgsqlConnection(Connectionstring)) { conn.Open(); var credentials = conn.Query(“select id,name from streams”).ToList(); ViewData[“Message”] = “Your application description page.”; conn.Close(); return Json(credentials); } } 上面的代码从数据库中为我返回Json,但是现在我实际上是通过将查询更改为此来从SQL代码返回Json var credentials = conn.Query(“select SELECT array_to_json(array_agg(t)) from (select id,name from streams) t”).ToList(); 新的查询正常工作,但它在Controller中返回null,因为我现在这样 public JsonResult streams() { using (var conn = new NpgsqlConnection(Connectionstring)) […]

获取连接在forEach中使用Dapper.SimpleCRUD时不支持MultipleActiveResultSets

我有以下代码: var test = new FallEnvironmentalCondition[] { new FallEnvironmentalCondition {Id=40,FallId=3,EnvironmentalConditionId=1}, new FallEnvironmentalCondition {Id=41,FallId=3,EnvironmentalConditionId=2}, new FallEnvironmentalCondition {Id=42,FallId=3,EnvironmentalConditionId=3} }; test.ToList().ForEach(async x => await conn.UpdateAsync(x)); 我得到了 InvalidOperationException:连接不支持MultipleActiveResultSets 我不明白我在await每次更新,为什么我会收到此错误。 注意:我无法控制连接字符串,因此无法打开MARS。

将DTO传递给我的ViewModels构造函数以映射属性

在我的解决方案中,我有两个项目。 项目1(核心)使用Dapper将SQL映射到DTO 项目2(WebUI – ASP.NET MVC 4)这里我使用每个View的ViewModel。 控制器的示例 [HttpGet] public ActionResult Edit(int id) { // Get my ProductDto in Core var product = Using().Single(id); var vm = new ProductFormModel(product); return View(vm); } ViewModel的示例 public class ProductFormModel : BaseViewModel, ICreateProductCommand { public int ProductId { get; set; } public int ProductGroupId { get; set; } public […]

使用multi.Read,输出参数始终为null

我们广泛使用Dapper.Net并对它非常满意。 但是,在尝试使用multi.Read从存储过程中检索输出参数时,我们遇到了一个问题: var p = new DynamicParameters(); p.Add(“@id”, id); p.Add(“TotalRows”, dbType: DbType.Int32, direction: ParameterDirection.Output); using (var multi = cnn.QueryMultiple(string.Format(“dbo.[{0}]”, spName), p, commandType: CommandType.StoredProcedure)) { int TotalRows = p.Get(“@TotalRows”); //This is always null var results = multi.Read().ToList(); var areas = multi.Read().ToList(); var categories = multi.Read().ToList(); int TotalRows = multi.Read().FirstOrDefault(); // This works } 但是,如果我们使用connection.Query语法来获取单个结果集,则会填充输出参数: var result […]

在Dapper中执行带有参数的存储过程

我正在使用Dapper (感谢Sam ,很棒的项目。)带有DAL的微型ORM,由于某种原因,我无法使用输入参数执行存储过程。 在某种服务中,我有这样的事情: public void GetSomething(int somethingId) { IRepository repository = UnitOfWork.GetRepository(); var param = new DynamicParameters(); param.Add(“@somethingId”, dbType: DbType.Int32, value:somethingId, direction: ParameterDirection.Input); var result = repository.Exec(SomethingEnum.spMyStoredProcedure, param); … } 当存储过程的执行发生时,抛出SqlException声明我需要提供’somethingId’ 过程或函数’spMyStoredProcedure’需要参数’@somethingId’,这是未提供的。 我的DAL类似于Pencroff的这个github项目。 我在这里错过了什么吗? 更新:我实际上是通过SomethingEnum传递commandType: public class SomethingEnum : EnumBase { public static readonly SomethingEnum spMyStoredProcedure = new SomethingEnum(“spMyStoredProcedure”, “[dbo].[spMyStoredProcedure]”, CommandType.StoredProcedure); public SomethingEnum(string Name, […]

使用Dapper映射SqlGeography

我有实体“点”,包含Id,文本和地理坐标。 CREATE TABLE [Point] ( [Id] INT IDENTITY CONSTRAINT [PK_Point_Id] PRIMARY KEY, [Coords] GEOGRAPHY NOT NULL, [Text] NVARCHAR(32) NOT NULL, [CreationDate] DATETIME NOT NULL, [IsDeleted] BIT NOT NULL DEFAULT(0) ) CREATE PROCEDURE [InsertPoint] @text NVARCHAR(MAX), @coords GEOGRAPHY AS BEGIN INSERT INTO [Point](Text, Coords, CreationDate) VALUES(@text, @coords, GETUTCDATE()) SELECT * FROM [Point] WHERE [Id] = SCOPE_IDENTITY() […]

澄清Dapper示例代码

我试图找到Dapper并且似乎缺少一些非常基础的东西,有人可以解释下面从Google代码上的Dapper主页获取的代码并解释为什么没有From子句,以及Query方法的第二个参数(动态)传递一个匿名类型,我收集这是以某种方式设置一个命令对象,但想用一个凡人的术语解释。 谢谢你,斯蒂芬 public class Dog { public int? Age { get; set; } public Guid Id { get; set; } public string Name { get; set; } public float? Weight { get; set; } public int IgnoredProperty { get { return 1; } } } var guid = Guid.NewGuid(); var dog = connection.Query(“select Age = […]

使用dapper.net返回mysql LAST_INSERT_ID()时无效的强制转换

MSSQL在这里已经涵盖了这个问题: 如何使用Dapper执行插入并返回插入的标识? 但是这个解决方案不适用于mysql。 要使用mysql将LAST_INSERT_ID()为整数,您必须这样做: SELECT CAST(LAST_INSERT_ID() AS UNSIGNED INTEGER); 堆栈跟踪是: Dapper.d__13`1.MoveNext() in sqlMapper.cs:607 System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) +159 System.Linq.Enumerable.ToList(IEnumerable`1 source) +36 Dapper.SqlMapper.Query(IDbConnection cnn, String sql, Object param, IDbTransaction transaction, Boolean buffered, Nullable`1 commandTimeout, Nullable`1 commandType) in sqlMapper.cs:535 有没有人在MySQL中解决这个问题? 编辑: 我已成功完成以下工作: var id = connection.Query(“SELECT CAST(LAST_INSERT_ID() AS UNSIGNED INTEGER);”).Single(); 也许并不理想,但它确实有效。

DAL与小巧玲珑和C#

我有一个利用Dapper的数据访问层,但不禁觉得它可以更加优雅。 DAL只是传递参数并根据模型的命名响应映射模型,因此该部分至少是直接的,但我讨厌看起来重复的代码。 这是一个例子 public IEnumerable ProductSearch(int? userId, DateTime? modifiedAfter, DateTime? modifiedBefore, Guid? productId) { IList products; using (var connection = _connection.OpenConnection()) { const string sproc = “dbo.stp_Product_Search”; products = connection.Query(sproc, new { User_ID = userId, Modified_After = modifiedAfter, Modified_Before = modifiedBefore, Product_ID = productId }, commandType: CommandType.StoredProcedure) .ToList(); } return products; } 我有很多这样的代码,但使用了不同的参数和实体。 有没有人有任何好的例子?

如何记录/获取Dapper Extensions自动生成的SQL查询?

我使用Dapper Extensions(DE)作为ORM。 它在使用Repository模式实现的数据访问层中使用。 SQL Express是后端RDBMS。 DE会自动为我生成大部分查询。 我想记录这些自动生成的查询以进行调试。 我可以通过两种方式来实现这一目标: – 获取DE生成的SQL查询(在执行之前或之后)并将其写入日志。 这是我的首选方式,因为我已经有了我的日志记录模块(使用log4net)。 我唯一需要的是DE生成的SQL。 将DE与一些记录工具集成。 我读了这个答案。 使用MiniProfiler工具看起来可能; 但正如我上面所说,我已经有了我的记录模块。 我不想仅使用其他工具来记录SQL查询。 如何在不使用任何其他日志记录工具的情况下记录/获取Dapper Extensions自动生成的SQL查询? 另一个类似的问题是关于Dapper。 这个问题是关于Dapper Extensions。