实体框架与mysql,linux和windows之间的表资本化问题

AFr*_*eze 7 mysql sql entity-framework

我们目前正在使用Code First Entity Framework和Mysql开发产品.开发数据库托管在Windows环境中,而生产mysql在Linux上.

我遇到的问题是mysql中的表命名如下:

 mydatabase.industry
 mydatabase.account
 ...
Run Code Online (Sandbox Code Playgroud)

实体框架创建一个这样的查询:

  Select * FROM mydatabase.Industry;
Run Code Online (Sandbox Code Playgroud)

注意大写字母.这适用于Windows中的mysql,但在Linux上我收到此错误:

  Table 'mydatabase.Industry' doesn't exist
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Jas*_*Cav 10

实体框架将使用与为对象声明的相同名称(大小写等).因此,例如,如果将模型对象声明为:

public class Industry
{
  public int IndustryID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

实体框架将查找具有IndustryID列的Industry表.

您可以通过向模型添加注释来更改此设置.请执行下列操作:

[Table("industry")]
public class Industry
{
  public int IndustryID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

通过这样做,您的对象仍将使用适当的.NET命名方案,但它将匹配您的相应数据库.您还可以使用ColumnAttribute更改colunns的名称.

或者,您可以更改MySQL中的表名.


小智 5

使用 EF6 :

      protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Types().Configure(entity => entity.ToTable(entity.ClrType.Name.ToLower()));
    }
Run Code Online (Sandbox Code Playgroud)