我的应用程序工作正常,没有触发器。
添加触发器以跟踪更改会导致Entity Framework返回错误
子查询返回的值超过1"消息。
然而
两者都很好。即:不重复记录。
我无法确定这种情况。这是代码:
T-SQL触发器:
CREATE TRIGGER [dbo].[trace_kIAlmacenTipo]
ON [dbo].[kIAlmacenTipo]
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @net_ip varchar(48), @login_name varchar(50), @net_address varchar(50)
SET @net_ip = dbo.getIP()
SET @login_name = dbo.getLogin()
SET @net_address = dbo.getAddress()
INSERT INTO [trk].[kIAlmacenTipo_trk]
(idAlmacenTipo, tipo, descripcion, baja, fkSesion, loginname, netip, netaddress, date)
SELECT
i.idAlmacenTipo, i.tipo, i.descripcion, i.baja, i.fkSesion,
@login_name, @net_ip, @net_address, GETDATE()
FROM inserted i
END
EF生成的SQL Server语句(从分析工具检索,按预期从SQL Server Management Studio工作:)
exec sp_executesql N'UPDATE [dbo].[kIAlmacenTipo] SET [tipo] = @0, [descripcion] = @1, [baja] = @2, [fkSesion] = @3 WHERE ([idAlmacenTipo] = @4) ',N'@0 int,@1 nvarchar(50),@2 bit,@3 int,@4int',@0=6,@1=N'test++',@2=0,@3=4,@4=8
控制器代码(按预期工作,不在kIAlmacenTipo
表上触发)
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "idAlmacenTipo,tipo,descripcion,baja,fkSesion")] kIAlmacenTipo kIAlmacenTipo)
{
if (ModelState.IsValid)
{
try
{
kIAlmacenTipo.fkSesion = Convert.ToInt32(Session["idSesion"]);
db.Entry(kIAlmacenTipo).State = EntityState.Modified;
db.SaveChanges(); // here ==> catching InnerException "SubQuery returned more than 1 value...."
return RedirectToAction("Index");
}
catch (Exception ex)
{
ModelState.AddModelError("", "Error: " + ex.Message);
}
return View(kIAlmacenTipo);
}
ViewBag.fkSesion = new SelectList(db.iOSesion, "idSesion", "ip", kIAlmacenTipo.fkSesion);
return View(kIAlmacenTipo);
}
提前致谢。
美好的一天。
答案 0 :(得分:1)
你的某个功能会抛出它吗?
尝试用字符串替换dbo.getIP()
,dbo.getLogin()
和dbo.getAddress()
并再次测试。 EF可能与其他帐户相关联,因此dbo.getLogin()
可能与您的手动测试结果不同。