【问题标题】:Strange error message when using SaveChanges in EF with MVC将 EF 中的 SaveChanges 与 MVC 一起使用时出现奇怪的错误消息
【发布时间】:2012-05-21 23:32:55
【问题描述】:

我有一个dropdownlistfor,其中的值不是来自我的数据库,当用户选择我的数据库中不存在的值时,我想将它保存到数据库中(如果它已经存在,我只需使用现有数据)。

这适用于我的一些数据(请参阅代码以了解它不起作用的地方)

这是我的仓库:

 public void newPerson(Person addperson)
    {
        db.Person.AddObject(addperson);
        db.SaveChanges(); //This wont work
    }

这是我的控制器:

[HttpPost]
    public ActionResult Create(CreateNKIphase1ViewModel model)
    {
        if (ModelState.IsValid)
        {
            var goalcard = new GoalCard();

            var companyChecker = "";
            var dbCompanies = createNKIRep.GetCustomerByName();
            var addcustomer = new Customer();
            foreach (var existingcustomer in dbCompanies)
            {
                companyChecker = existingcustomer.CompanyName;
                    if (existingcustomer.CompanyName == model.CompanyName)
                    {
                        var customerId = existingcustomer.Id;
                        var selectedCustomerID = createNKIRep.GetByCustomerID(customerId);
                        goalcard.Customer = selectedCustomerID;
                        break;
                    }
            }
            if (companyChecker != model.CompanyName)
            {
                addcustomer.CompanyName = model.CompanyName;
                createNKIRep.newCustomer(addcustomer); //This works!
                goalcard.Customer = addcustomer;
            }

            if (model.PersonName != null)
            {
                var Personchecker = "";
                var dbPersons = createNKIRep.GetPersonsByName();

                foreach (var existingPerson in dbPersons)
                {
                    Personchecker = existingPerson.Name;
                    if (existingPerson.Name == model.PersonName)
                    {
                        var personId = existingPerson.Id;
                        var selectedPersonID = createNKIRep.GetByPersonID(personId);
                        goalcard.Person = selectedPersonID;
                        break;
                    }
                }
                if (Personchecker != model.PersonName)
                {
                    Person newPerson = new Person();
                    newPerson.Name = model.PersonName;
                    createNKIRep.newPerson(newPerson);//Where repository is called
                    goalcard.Person = newPerson;
                }
            }

但是当我尝试保存新的Person 时,我收到以下错误消息:

将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围。 声明已终止。

说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

尽管Person 在我的数据库中只有Idname 作为属性。

我的代码有什么问题吗,或者我的数据库中是否有任何设置需要更改?

提前致谢。

【问题讨论】:

  • 对我来说听起来像是与您的数据库有关。你的 Person 表是什么结构?它不包含任何日期时间字段?任何外键或触发器?
  • 它有一个导航属性到Goalcard。还有IDName的属性。

标签: database asp.net-mvc linq entity-framework entity-framework-4


【解决方案1】:

这是因为我在一个post 中多次使用db.SaveChanges();。减少我使用db.SaveChanges 的次数帮助我摆脱了错误。

【讨论】:

    猜你喜欢
    • 2015-05-19
    • 2021-05-30
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    相关资源
    最近更新 更多