实体框架代码第一 - MySQL - 错误找不到表

Bud*_*Joe 5 mysql entity-framework ef-code-first entity-framework-4.1

我是EF,EF Code First和EF with MySQL的新手.EF Code First何时在ASP.NET MVC Web项目中创建表?

我创建了一个Person模型.然后生成Controller和标准视图.当我点击Person控制器的Index方法时,它会尝试撤回所有People的列表.然后我得到错误:
执行命令定义时发生错误.有关详细信息,请参阅内部异常
内部异常:
表'testmvc.people'不存在

所以我已经超越了连接.但桌子没有创建.如何创建表格?另外,如何在命名方案中防止Person to People的复数化?

Pin*_*nyM 8

生成数据库模式(人员表和其他人)的最简单方法是设置数据库初始化策略,如下所示:

Database.SetInitializer<SomeContext>( new 
    DropCreateDatabaseAlways<SomeContext>());
Run Code Online (Sandbox Code Playgroud)

此代码需要在尝试加载任何数据之前运行,因此Global.asax中的Application_Start()方法将是一个很好的地方.有几种方法可以初始化,因此您可能需要在选择之前查看它们,请参阅http://msdn.microsoft.com/en-us/library/system.data.entity%28v=vs.103% 29.aspx并查看实现IDatabaseInitializer的方法.官方说来,默认情况下有一个策略,虽然我从来没有发现这对我有用.

您还应该知道,虽然此方法非常适合原型设计和开发,但您不能在具有实时数据的生产数据库上使用它,因为首先删除数据库然后重新创建数据库.此时还有其他方法可以执行此操作 - 请参阅Entity Framework 4的数据库迁移以了解可能性.

关于使用非复数表名的其他问题,有几种方法可以做到这一点.一种方法是像这样注释Person类:

[Table("Person")]
class Person
{
    // some field attributes
}
Run Code Online (Sandbox Code Playgroud)

要一次为所有表设置此项,您可以使用fluent API,如下所示:

class SomeContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {    
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}
Run Code Online (Sandbox Code Playgroud)