How can I stop Entity Framework 5 migrations adding dbo. into key names?

前端 未结 4 1119
情深已故
情深已故 2020-12-05 00:32

I started a project using Entity Framework 4.3 Code First with manual migrations and SQL Express 2008 and recently updated to EF5 (in VS 2010) and noticed that now when I ch

4条回答
  •  不知归路
    2020-12-05 00:59

    Improving on bricelam's answer, I tried this on EF6. Made a few changes to keep the schema as part of table name and only remove it from the FK or PK name

    internal class MyCodeGenerator : CSharpMigrationCodeGenerator
    {
        protected override void Generate(AddForeignKeyOperation addForeignKeyOperation, IndentedTextWriter writer)
        {
            addForeignKeyOperation.Name = this.StripDbo(addForeignKeyOperation.Name, addForeignKeyOperation.DependentTable);
            addForeignKeyOperation.Name = this.StripDbo(addForeignKeyOperation.Name, addForeignKeyOperation.PrincipalTable);
            base.Generate(addForeignKeyOperation, writer);
        }
    
        protected override void Generate(AddPrimaryKeyOperation addPrimaryKeyOperation, IndentedTextWriter writer)
        {
            addPrimaryKeyOperation.Name = StripDbo(addPrimaryKeyOperation.Name, addPrimaryKeyOperation.Table);
            base.Generate(addPrimaryKeyOperation, writer);
        }
    
        protected override void Generate(DropForeignKeyOperation dropForeignKeyOperation, IndentedTextWriter writer)
        {
            dropForeignKeyOperation.Name = this.StripDbo(dropForeignKeyOperation.Name, dropForeignKeyOperation.DependentTable);
            dropForeignKeyOperation.Name = this.StripDbo(dropForeignKeyOperation.Name, dropForeignKeyOperation.PrincipalTable);
            base.Generate(dropForeignKeyOperation, writer);
        }
    
        protected override void Generate(DropPrimaryKeyOperation dropPrimaryKeyOperation, IndentedTextWriter writer)
        {
            dropPrimaryKeyOperation.Name = StripDbo(dropPrimaryKeyOperation.Name, dropPrimaryKeyOperation.Table);
            base.Generate(dropPrimaryKeyOperation, writer);
        }
    
        private string StripDbo(string objectName, string tableName)
        {
            if (tableName.StartsWith("dbo."))
            {
                return objectName.Replace(tableName, tableName.Substring(4));
            }
    
            return objectName;
        }
    }
    

提交回复
热议问题