Да, вы можете.
В конце концов, DbContext - это просто объектно-ориентированная модель ваших данных. Если генератор подмостил это для вас или вы вручную его создали, это не имеет значения. Я сам иду по этому маршруту.
База данных уже существует и поддерживается с помощью проекта .sqlproj, и хотя она начиналась как код сначала, я переключился на полпути.
В качестве практического примера. Я использую OnModelCreating
, чтобы настроить свои объекты:
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
//extracted m:n mapping for demonstration puporses
builder.Entity<AppUserRole>(userRole =>
{
userRole.HasKey(ur => new { ur.UserId, ur.RoleId });
userRole.HasOne(ur => ur.Role)
.WithMany(r => r.UserRoles)
.HasForeignKey(ur => ur.RoleId)
.IsRequired();
userRole.HasOne(ur => ur.User)
.WithMany(r => r.UserRoles)
.HasForeignKey(ur => ur.UserId)
.IsRequired();
});
builder.ApplyConfiguration(new AppUserConfiguration());
builder.ApplyConfiguration(new MapConfigConfiguration());
builder.ApplyConfiguration(new MapWidgetConfiguration());
builder.ApplyConfiguration(new WidgetConfiguration());
builder.ApplyConfiguration(new LayoutMenuConfiguration());
builder.ApplyConfiguration(new ImageConfiguration());
builder.ApplyConfiguration(new FrontPageContentConfiguration());
}
}
Для начала вы можете создать существующую базу данных с помощью консоли Nuget:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Foo;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
А затем, при необходимости, настройте его на свои нужды. Поэтому, если у вас есть json, сохраненный в поле nvarchar, добавьте преобразование, чтобы автоматически сопоставить его с конкретным типом:
public class LayerConfigurationConfiguration : IEntityTypeConfiguration<LayerConfiguration>
{
public void Configure(EntityTypeBuilder<LayerConfiguration> builder)
{
builder.HasKey(lc => lc.Id);
/* ... */
builder.Property(lc => lc.LayerConfig).HasConversion(
v => JsonConvert.SerializeObject(v, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }),
v => JsonConvert.DeserializeObject<LayerConfig>(v)
);
}
}
Ссылка: https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db