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 codeAdditional information: An error occurred while updating the entries.
See the inner exception for details."
当我去 InnerException 它说
"Invalid object name 'dbo.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 将尝试按照约定在您的数据库中查找名为
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; } |
你去吧!