gpt4 book ai didi

c# - 如何在 MVC 中使用 Dapper 插入数据并返回插入的标识?

转载 作者:行者123 更新时间:2023-11-30 18:22:38 29 4
gpt4 key购买 nike

我有一个像这样的产品模型,

public int ProductID { get; set; }
public int ProductDetailsID { get; set; }
public int ProductStatusID { get; set; }
public string ProductName { get; set; }
public int Priority { get; set; }
public DateTime LastProcessedDate { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime ModifiedDate { get; set; }
public bool Enabled { get; set; }

这是我的看法,

@model MVCApplication1.Models.Products
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm())
{
<div class="form-horizontal">
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(i => i.ProductDetailsID, new { @Value = ViewBag.ProductDetailsID })
<div class="form-group">
@Html.LabelFor(i => i.Name, "Product Name ", new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(i => i.Name, new { @class = "form-control" })
@Html.ValidationMessageFor(i => i.Name, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(i => i.Enabled, "Enabled ", new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.CheckBoxFor(i => i.Enabled, new { @class = "checkbox", @checked = "checked" })
@Html.ValidationMessageFor(i => i.Enabled)
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}

这是我的 Controller ,

[HttpPost]
public ActionResult Create(Products model)
{
try
{
if (ModelState.IsValid)
{
model.LastProcessedDate = DateTime.Now;
model.CreatedDate = DateTime.Now;
model.ModifiedDate = DateTime.Now;
model.ProductStatusID = 0;
int id = con.Query<int>("ProductInsert", model, commandType: CommandType.StoredProcedure).Single();

return Content("Product added successfully..!!", "text/plain");
}
}
catch (Exception)
{
throw;
}
return View();
}

这是我的sql代码,

CREATE PROCEDURE [dbo].[ProductCreate]
(
@ProductDetailsId INTEGER,
@ProductStatusID INTEGER,
@ProductName VARCHAR(255),
@Priority INTEGER,
@LastProcessedDate DATETIME,
@CreatedDate DATETIME,
@ModifiedDate DATETIME,
@Enabled BIT
)
AS
INSERT INTO dbo.Products (ProductDetailsId, ProductStatusId, Product, Priority, LastProcessedDate, CreatedDate, ModifiedDate, Enabled, ScheduleTypeId, Server, RetryNumber, Message)
VALUES(@ProductDetailsId, @ProductStatusId, @ProductName, @Priority, @LastProcessedDate, @CreatedDate, @ModifiedDate, @Enabled)

SELECT SCOPE_IDENTITY() AS ProductID

我收到“过程或函数 ProductCreate 指定的参数太多”错误。

我做错了什么?

最佳答案

当您调用存储过程时,dapper 没有很好的方法知道哪些成员应该被视为参数。对于常规的 tsql,它可以尝试“显然没有使用”、“显然使用过”、“可能”——但是 dapper 不会选择支付额外的费用来询问数据库你的存储过程是什么看起来一直都是。我怀疑它正在添加未使用的属性 - 特别是 ProductId。通过映射到 anon 类型来帮助它。不要传递 model,而是传递:

new { model.ProductDetailsId, model.ProductStatusID, ...todo... ,
model.Enabled }

关于c# - 如何在 MVC 中使用 Dapper 插入数据并返回插入的标识?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33766148/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com