mvc4 EF中的模型数据库上下文是否存在复数问题

时间:2013-01-03 18:40:35

标签: asp.net-mvc-4 entity-framework-5

当我尝试从编辑或详细信息操作中访问模型时,我一直收到错误。

  

支持'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。实体框架是不是处理这个?

2 个答案:

答案 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删除了所有迁移,并再次启用了迁移添加迁移和更新,然后我得到了预期的结果。

底线---项目中没有多个上下文类。不确定这是否可行,但在更改上述内容后,所有内容都按预期工作。当我有两个单独的上下文并添加第三个上下文时,不确定它为什么工作?也许是因为他们互相拥有外键?