我知道有很多关于它的问题,但我读过它们中的20个并且找不到我的答案。我有这个错误
“类型的例外 发生'System.Data.Entity.Infrastructure.DbUpdateException' EntityFramework.dll但未在用户代码中处理
其他信息:更新条目时发生错误。 有关详细信息,请参阅内部异常。“
当我去InnerException时,它说
“无效的对象名称'dbo.Samochodies'。”
。我不知道这到底是什么,因为我的程序中没有任何“Samochodies
”..无论如何,这就是代码:
CarsController.cs
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班
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; }
}
答案 0 :(得分:0)
当您使用现有数据库时,如果您没有在映射实体时指定表名,那么EF将尝试按照惯例查找数据库中名为Samochodies
的表。一种解决方案可能是使用Table
属性来指定实际表名:
[Table("YourTableName")]
public class Samochody
{
//...
}
现在,也许异常是因为您更改了实体的名称。对于这样的情况,EF有一些初始化程序可以帮助您在每次更改模型时解决此类问题,在您的情况下它将是:
public class CarDBCtxt : DbContext
{
public DbSet<Samochody> Cars { get; set; }
public CarDBCtx(): base("CarDBCtxt")
{
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<CarDBCtxt>());
}
}
如果您想了解有关初始化程序的更多信息,请查看此link。
答案 1 :(得分:0)
这个答案对Koskilla的帮助了我:
修改我的模型以使用可为null的DateTime类型的对象(Nullable?-type)解决了该问题。因此,简而言之,要解决错误“将datetime2数据类型转换为DateTime数据类型导致值超出范围”,请将模型中的DateTime属性更改为DateTime?。
示例:
// "Nullable DateTime", DateTime?, won't throw an error in the cast in EF
public DateTime? StartDate { get; set; }
然后您就去了!
答案 2 :(得分:0)
问题在于表的ID不是AUTO_INCREMENT,请将该ID设置为AUTO_INCREMENT