EF 中 db.SaveChanges() 的参数超出范围

问题描述 投票:0回答:3

我正在使用实体框架开发 MVC 应用程序。我使用数据库优先方法,在我的数据库中有一个数字字段:

[N15]  NUMERIC (1, 1)  NULL,

我遇到错误的代码是:

public ActionResult allsave(VchrViewModel v)
{  
    List<TrD> chklist = this.dt;
    if (br.vchrbalance(chklist) == true)
    {
        trm = v.master;
        trm.S100 = vt;
        var n = db.TrMs.Max(x => x.N100);
        trm.N100 = n + 1;
        trm.S104 = getmonth(trm.D1.ToString());
        trm.S103 = getyear(trm.D1.ToString());
        db.TrMs.Add(trm);
        db.SaveChanges();
        seid = 0;
        var s = this.dt;
        foreach (TrD trd in s)
        {
            trd.S100 = vt;
            var d = db.TrDs.Max(x => x.N100);
            trd.N100 = d + 1;
            trd.N101 = v.master.N100;
            db.TrDs.Add(trd);

            db.SaveChanges();
            TrnYes4MST(trd.S1);
        }
        return Json(new { msg = "Y" });
    }
    else
    {
        return Json(new { msg = "N" });
    }
}

我从视图中获取两个不同表的记录。我已成功将记录保存在名为“TrM”的第一个表中,该表对于 N15 没有任何值。但在表“TrD”的 foreach 循环中,第一次迭代 N15 = 1。 但在 db.SaveCHanges() 方法上,我收到以下错误。

Parameter {1.0} is out of range

我已经重新生成了我的 edmx 文件,但仍然无法解析。

c# sql sql-server asp.net-mvc entity-framework
3个回答
1
投票

要存储 1.0,您需要将数字声明为

[N15]  NUMERIC (2, 1)  NULL,

或者干脆不声明精度。

请参阅:https://msdn.microsoft.com/en-AU/library/ms187746.aspx


0
投票

问题出在 EDMX 上。仅更改数据库并不能使其工作。由于 EDMX 不会随着数据库中的更改而更新自身,因此每次提交数据库更改后,都必须从 Visual Studio 更新 EDMX。

我更新了 SQL Server 中表的设计,然后更新了 EDMX。之后,我为我的 Model.tt 文件运行自定义工具...并且它有效!!!


0
投票

右键单击 model.tt 并单击自定义工具,我解决了问题。 谢谢

© www.soinside.com 2019 - 2024. All rights reserved.