【发布时间】:2014-08-24 19:04:49
【问题描述】:
我正在使用 EF 的代码优先实用程序来帮助我构建一个简单的 ASP.MVC Web API,我将在其中保留一些关于另一个项目开发的个人日志。
当我第一次开始创建它时,我给 Log.cs 模型提供了一些我认为必要的属性,后来我删除了它们,因为它们是冗余的。
我更新了我的 Log.cs 模型,然后在 PMC 中运行了 Update-Database -Verbose 命令。然后,当我去检查数据库中的 Logs 表时,我注意到迁移没有删除列,所以我手动进行了:删除了列、FK 和与之关联的索引。
到目前为止一切顺利,直到我尝试在 LogsController 中添加一个新日志并调用 SaveChanges()。现在,对于我之前删除的属性,它给了我一个“无效的列名'exampleName'”错误。
对我在任何地方都找不到的属性进行解决方案搜索(因此我可以从任何寻找它们的脚本中删除它们)。
在整个开发过程中,我将 AutomaticMigrationsEnabled 和 AutomaticMigrationDataLossAllowed 设置为 true。
由于我的英文很差,让我放一些代码来帮助说明问题。
模型:
public class Log
{
public int Id { get; set; }
public int OwnerTable { get; set; }
public int OwnerCode { get; set; }
public int OwnerId { get; set; }
public int Hidden { get; set; }
public string ModificationShort { get; set; }
public string ModificationLong { get; set; }
public string Version { get; set; }
public string Stuff { get; set; }
public DateTime Date { get; set; }
}
产生错误的控制器(请记住,Log 没有自己的控制器,因为该模型用于保存有关其他模型中所做更改的信息):
[HttpPost]
public ActionResult New(Element elem)
{
if(ModelState.IsValid)
{
elem.Date = DateTime.Now;
try
{
elem.Code = _db.Elements.OrderByDescending(r => r.Code).ToList().Count + 1;
}
catch (Exception)
{
elem.Code = 1;
}
elem.Logs = new List<Log>();
elem.Logs.Add(new Log
{
Date = DateTime.Now,
Hidden = 0,
ModificationShort = "Element criation",
ModificationLong = "Explanation why the element was added to the project",
Version = "0.1",
Stuff = "aditional information that might be usefull later on",
OwnerTable = Resources.Constants.TABBLE_ELEMENTS,
OwnerCode = elem.Code,
OwnerId = elem.Id
});
_db.Elements.Add(elem);
_db.SaveChanges();
return RedirectToAction("Index", new { name = elem.Name });
}
return View(elem);
}
请忽略代码中与问题无关的所有其他错误,因为这是一项正在进行的工作,我知道它有很多错误。在解决这个问题之前我不能这样做。
另外,如果我可以提供更多信息来帮助更好地回答,请告诉我。
提前谢谢你。
更新:
忘了说我已经试过了。
尝试完全删除数据库(.mdf 文件)并再次更新。 尝试从项目中删除 Migrations 文件夹并在 PMC 中再次启用它,以便它将使用正确的模型创建新脚本。 尝试了另一个问题Entity Framework 5 Code First - How to “start over”?中提出的解决方案 试图从解决方案中的每个文件中删除所有已删除属性的出现(使用解决方案搜索,不知道是否存在解决方案搜索工具无法到达的任何对它的引用)
更新2:
这是 DbContext 类的代码:
public class GoPDB : DbContext
{
public GoPDB() : base("name=DefaultConnection")
{
}
public DbSet<Ability> Abilities { get; set; }
public DbSet<Element> Elements { get; set; }
public DbSet<ElementCard> ElementCards { get; set; }
public DbSet<Log> Logs { get; set; }
public DbSet<Piece> Pieces { get; set; }
}
【问题讨论】:
-
你能把你的
DbContext类的代码贴出来吗? -
您要删除并重新创建数据库吗?
-
找到了解决方案,编辑了解释我是如何做到的问题。
-
如果您已经回答了自己的问题,请继续将信息放入正确的答案中,并将其标记为问题的答案(打勾)。
标签: c# entity-framework asp.net-mvc-5