【问题标题】:Is there a plural issue for models database context y to ies in mvc4 EF在 mvc4 EF 中,模型数据库上下文 y 到 ies 是否存在复数问题
【发布时间】:2012-12-18 04:20:38
【问题描述】:

当我尝试通过编辑或详细信息操作访问模型时,我不断收到错误消息。

支持“InjuriesContext”上下文的模型自 数据库已创建。考虑使用 Code First 迁移来更新 数据库 (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);
        }

它在injury.find 上出错。我没有输入任何伤害,所以我希望它像我的其他控制器一样返回 404,但它不喜欢这个。这个和我的其他模型之间的唯一区别是复数的 y 到 ies。 Entity Framework 不处理这个吗?

【问题讨论】:

  • “初始迁移和更新”是什么意思?你不想手动映射表名吗? (尽管那只会回避问题)。
  • @GertArnold 我通过实体框架运行并初始添加迁移和更新数据库,以便创建表。我不确定你的意思是我手动映射表名。

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


【解决方案1】:

不应该有任何复数限制,因为无论如何你都清楚地定义了你的类。

您是否创建了 Injures 表?

我相信 Injury 表会自动创建。可变伤害可能有点接近,但我必须自己测试。

不如试试:

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);

希望对你有帮助

【讨论】:

  • 是的,当我运行初始迁移时,EF 创建了 Injuries 表。我尝试了上述方法并得到了同样的错误。我很茫然。我刚刚创建了一个不同的控制器,没有 ies,它工作正常。
  • 最后一击。在没有 ies 而只有 S 的控制器/模型上遇到同样的问题。不确定发生了什么。创建的表具有所有正确的字段,所以我不知道它认为发生了什么变化?
  • 感谢确实发现这里提到的复数没有问题,但上面已经回答了根本问题。 +1 寻求帮助。
【解决方案2】:

事实证明,我的问题与多个上下文有关。我认为您必须为每个模型类创建一个单独的上下文。显然实体框架需要一个上下文。我经历并为我的上下文创建了一个类,并将我所有的数据库集放在那个类中。

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

底线--- 在您的项目中不要有多个上下文类。不确定这是否可行,但在更改上述内容后,一切都按预期工作。不知道为什么当我有两个不同的上下文并添加第三个时它会起作用?也许是因为他们彼此有外键?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多