我正在使用EF Core和DatabaseFirst方法。我的dbContext是通过 Scaffold-DbContext
命令自动生成的。
我需要向dbContext中添加一些新的DbSet,并在OnModelCreating
方法中添加一些额外的代码,但是每次脚手架生成之后,这些添加的代码都会被擦除,我必须再次添加它们。
我的想法是创建另一个partial dbContext类并将protected override void OnModelCreating(ModelBuilder modelBuilder)
方法标记为partial
但遇到了错误:
partial方法不能有访问修饰符或virtual、abstract、override、new、sealed或extern修饰符。
partial方法不允许具有多个实现声明
这里是伪代码:
MyDbContext1.cs
- 由Scaffold-DbContext
生成
public partial class MyDbContext : DbContext
{
public MyDbContext()
{
}
public MyDbContext(DbContextOptions<MyDbContext> options)
: base(options)
{
}
public virtual DbSet<Client> Clients { get; set; }
protected override partial void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Client>(entity =>
{
// some code ...
}
}
}
MyDbContext2.cs
- 在使用脚手架后,我每次都会将这段代码添加到dbContext中:
public partial class MyDbContext
{
public virtual DbSet<JustAnotherEntity> AnotherEntity { get; set; }
protected override partial void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<JustAnotherEntity>(entity =>
{
entity.HasKey(e => new {e.Id, e.IdAction, e.IdState})
.ForSqlServerIsClustered(false);
});
}
}
partial
来分割方法逻辑。哪个方法应该先执行,或者编译器如何知道如何合并部分类?根据微软文档,部分类声明由两部分组成:定义和实现。
2/2 - nilsKpartial
,并将逻辑放在你的类之一中。2/2 - nilsKOnModelCreatingPartial
解决方案,所以被接受的答案对我帮助很大。我认为它应该成为被接受的答案,尽管Simon的答案是现在最好的解决方法。 - Dmitry Stepanov