关于 c#:Entity Framework:更新条目时出错

Entity Framework: An error occurred while updating the entries

我知道有很多关于它的问题,但我已经阅读了大约 20 个问题,但无法为我找到答案。我有这个错误

"An exception of type
'System.Data.Entity.Infrastructure.DbUpdateException' occurred in
EntityFramework.dll but was not handled in user code

Additional information: An error occurred while updating the entries.
See the inner exception for details."

当我去 InnerException 它说

"Invalid object name 'dbo.Samochodies'."

。我不知道这到底是什么,因为我的程序中没有任何 \\'Samochodies\\'。无论如何,这就是代码:

CarsController.cs

1
2
3
4
5
6
7
8
9
10
public ActionResult Create([Bind(Include ="Id,Brand,Model,Price,Bought,Sold")] Samochody car)
    {
        if (ModelState.IsValid)
        {
            baza.Cars.Add(car);
            baza.SaveChanges(); //error here
            return RedirectToAction("Index");
        }
        return View(car);
    }

Samochody 类

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Samochody
{
    public int Id { get; set; }
    public string Brand { get; set; }
    public string Model { get; set; }
    public decimal Price { get; set; }
    public DateTime Bought { get; set; }
    public DateTime Sold { get; set; }

    public class CarDBCtxt : DbContext
    {
        public DbSet<Samochody> Cars { get; set; }
    }


当您使用现有数据库时,如果您在映射实体时未指定表名,则 EF 将尝试按照约定在您的数据库中查找名为 Samochodies 的表。一种解决方案可能是使用 Table 属性来指定真实的表名:

1
2
3
4
5
[Table("YourTableName")]
public class Samochody
{
  //...
}

现在,也许例外是因为您更改了实体的名称。在这种情况下,EF 有一些初始化程序可以帮助您在每次更改模型时解决此类问题,在您的情况下,它将是:

1
2
3
4
5
6
7
8
9
public class CarDBCtxt : DbContext
{
    public DbSet<Samochody> Cars { get; set; }

    public CarDBCtx(): base("CarDBCtxt")
    {
      Database.SetInitializer(new DropCreateDatabaseIfModelChanges<CarDBCtxt>());  
    }
}

如果您想了解有关初始化程序的更多信息,请查看此链接。


问题是表的Id不是AUTO_INCREMENT,请将Id设为AUTO_INCREMENT


这个答案从 Koskila 帮助了我:

修改我的模型以使用可为空的 DateTime 类型的对象(Nullable? -type)解决了这个问题。因此,简而言之,要解决"将 datetime2 数据类型转换为 DateTime 数据类型导致值超出范围"的错误,请将模型中的 DateTime 属性更改为 DateTime?。

示例:

1
2
//"Nullable DateTime", DateTime?, won't throw an error in the cast in EF
public DateTime? StartDate { get; set; }

你去吧!