当我尝试从编辑或详细信息操作中访问模型时,我一直收到错误。
支持'InjuriesContext'上下文的模型自此以后发生了变化 数据库已创建。考虑使用Code First Migrations进行更新 数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。
首先我尝试添加迁移,即使我确定我没有改变任何东西。在更新数据库之后仍然收到相同的错误。
然后我删除了所有迁移和数据库,并启动了一个带有初始迁移和更新的干净数据库。同样的错误。没有任何改变。
模型是:
public class InjuriesContext : DbContext
{
public InjuriesContext()
: base("DBCon")
{
}
public DbSet<Patient> Patients { get; set; }
public DbSet<Injury> Injuries { get; set; }
}
public class Injury
{
public int Id { get; set; }
public string Type { get; set; }
public int PatientId { get; set; }
}
这是控制器 -
public ActionResult Edit(int id = 0)
{
Injury injury = db.Injuries.Find(id);
if (injury == null)
{
return HttpNotFound();
}
return View(injury);
}
伤害错误。发现。我没有输入任何伤害,所以我希望它像我的其他控制器一样返回404,但它不喜欢这个。这和我的其他模型之间的唯一区别是复数的y和ies。实体框架是不是处理这个?
答案 0 :(得分:1)
不应该有任何复数限制,因为无论如何你在课程中清楚地定义了所有内容。
你创建了伤害表吗?
我相信表会自动创建伤害。变量伤害可能有点接近,但我必须自己测试一下。
而是尝试:
public class Injury
{
[Key]
public int Id { get; set; }
[Required]
public string Type { get; set; }
[Required]
public int PatientId { get; set; }
}
private InjuriesContext db = new InjuriesContext();
Injury objInjury = db.Injuries.Find(id);
if (objInjury == null)
{
return HttpNotFound();
}
return View(objInjury);
希望这有帮助
答案 1 :(得分:0)
事实证明我的问题是多个背景。我认为你必须为每个模型类创建一个单独的上下文。显然,实体框架需要一个上下文。我经历了为我的上下文创建了一个类,并将所有的数据库集放在该类中。
public class ProjContexts : DbContext
{
public ProjContexts()
: base("ProjDBCon")
{
}
public DbSet<Patient> Patients { get; set; }
public DbSet<PreHosp> PreHosps { get; set; }
public DbSet<UserProfile> UserProfiles { get; set; }
public DbSet<Injury> Injuries { get; set; }
}
}
然后我按照this post删除了所有迁移,并再次启用了迁移添加迁移和更新,然后我得到了预期的结果。
底线---项目中没有多个上下文类。不确定这是否可行,但在更改上述内容后,所有内容都按预期工作。当我有两个单独的上下文并添加第三个上下文时,不确定它为什么工作?也许是因为他们互相拥有外键?