Как справиться с большой функцией OnModelCreating в Entity Framework?C#

Место общения программистов C#
Anonymous
Как справиться с большой функцией OnModelCreating в Entity Framework?

Сообщение Anonymous »

Мы хотим использовать собственное имя ограничения первичного ключа pk_users_id вместо созданного по умолчанию Entity Framework PK_Users. Для этого нет атрибута, и нам приходится использовать свободный API. У нас есть такой файл DbContext:

Код: Выделить всё

    public class AppDbContext: DbContext {
protected override void OnModelCreating(ModelBuilder modelBuilder) {
modelBuilder
.Entity()
.HasKey(user => user.Id)
.HasName("pk_users_is");

// here would be thousands of lines for other entities

base.OnModelCreating(modelBuilder);
}

public DbSet Users { get; set; }
}
Первое, что приходит на ум, — это создать статический метод для каждой сущности, а затем вызвать его для каждой сущности, например:

Код: Выделить всё

    public class UserEntity {
public int Id { get; set; }
public string Name { get; set; } = "";

public static void Configure(EntityTypeBuilder builder) {
builder
.HasKey(user => user.Id)
.HasName("pk_users_id");
}
}

Код: Выделить всё

    public class AppDbContext: DbContext {
protected override void OnModelCreating(ModelBuilder modelBuilder) {
UserEntity.Configure(modelBuilder.Entity());

// here call Configure for every entity, similarly as above

base.OnModelCreating(modelBuilder);
}

public DbSet Users { get; set; }
}
Однако использование подобных статических свойств является антишаблоном.
Каким может быть разумный способ сохранить каждую конфигурацию объекта в свободном API, этого нельзя достичь с помощью атрибутов рядом с сущностью, а не всего в OnModelCreating?

Подробнее здесь: https://stackoverflow.com/questions/786 ... -framework

Вернуться в «C#»