我正在使用C#,.NET 4.5,EF6 Code First,MySQL构建应用程序。
当我添加迁移时,生成的代码格式不正确。 “using”语句位于命名空间块中。这是一个例子:
错误:(由EF生成)
namespace RevoHost.BL.Entities.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class Permissions : DbMigration
{
public override void Up()
{
CreateTable(
// etc...
我预计:
using System;
using System.Data.Entity.Migrations;
namespace RevoHost.BL.Entities.Migrations
{
public partial class Permissions : DbMigration
{
public override void Up()
{
CreateTable(
// etc...
手动修复很容易,但它仍然很烦人。我一直在寻找解决方案,但到目前为止,我无法想出一个解决方案。
我的DbContext类有这个属性:
[DbConfigurationType(typeof(MySqlEFConfiguration))]
我配置了这样的迁移:
namespace RevoHost.BL.Entities.Migrations
{
internal sealed class Configuration : DbMigrationsConfiguration<RevoHost.BL.Entities.RevoContext>
{
public Configuration()
{
SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());
CodeGenerator = new MySql.Data.Entity.MySqlMigrationCodeGenerator();
AutomaticMigrationsEnabled = false;
}
答案 0 :(得分:0)
我发现了发生了什么事。事实上,正如Thewads在他的评论中提到的那样,代码本身并不是格式错误且完全合法。因为这是我的第一个在MySQL而不是SQL Server上运行的EF6项目,我立即认为MySQL是罪魁祸首,显然它不是。
我查看了另一个首先使用EF6代码进行迁移的项目。那段代码完全一样。接下来,我检查了从编译器得到的确切错误。
错误1类型或命名空间名称&#39; CodeDom&#39;命名空间中不存在&#39; RevoHost.BL.Entities.System&#39; (你错过了一个程序集引用吗?)
(和其他9个一样)
我在名为RevoHost.BL.Entities的名称空间中定义了一个实体。系统。 这会导致命名冲突;编译器在找到全局系统命名空间之前,在RevoHost.BL.Entities中找到System命名空间。
因此,简而言之,答案是,确保您没有定义与系统命名空间冲突的命名空间。