Переопределить генерацию SQL по умолчанию в EF 6 на основе типа объекта - PullRequest
0 голосов
/ 30 мая 2018

Имея типовой класс сущностей

public class MyTable {
    public Guid Id {get;set;}
    public string Name {get;set;}
}

EF генерирует что-то вроде этого:

    CreateTable(
        "dbo.MyTable",
        c => new
            {
                Id = c.Guid(nullable: false),
                Name = c.String(nullable: false, maxLength: 128),
            })
        .PrimaryKey(t => t.Id)

Я бы хотел унаследовать некоторые из моих классов сущностей от интерфейса IMyInterface:

public interface IMyEnterface {}

Затем я хочу переопределить генерацию по умолчанию, чтобы миграция для любого класса, реализующего IMyInterface, автоматически выглядела так:

    CreateTable(
        "dbo.MyTable",
        c => new
            {
                Id = c.Guid(nullable: false),
                Name = c.String(nullable: false, maxLength: 128),
            })
        .PrimaryKey(t => t.Id)

    Sql(@"EXEC sys.sp_addextendedproperty bla-bla-bla");

Есть лилюбая точка расширения в EF 6.2, чтобы это разрешить?

1 Ответ

0 голосов
/ 31 мая 2018

Проще сделать это при Seed методе:

var tables = context.GetType().GetProperties()
    .Where(x => 
        x.PropertyType.GenericTypeArguments
        .Any(y => typeof(IMyEnterface).IsAssignableFrom(y))
        );

foreach (var table in tables)    
    if(sp_NotExecutedYet(table))
        context.Database
           .ExecuteSqlCommand($"EXEC sys.sp_addextendedproperty {propertyNameFor(table)}");
...