【发布时间】:2019-02-10 10:00:12
【问题描述】:
我正在使用 EF Core 和 DatabaseFirst 方法。我的 dbContext 是由Scaffold-DbContext 命令自动创建的。
我需要在 dbContext 中添加一些新的 DbSet,并在 OnModelCreating 方法中添加一些额外的代码,但是在每个脚手架之后,添加的代码都会被删除,我必须每次都再次添加。
我要做的是创建另一个部分 dbContext 类并将protected override void OnModelCreating(ModelBuilder modelBuilder) 方法标记为部分
但得到错误:
部分方法不能有访问修饰符或 virtual、abstract、override、new、sealed 或 extern 修饰符。
一个分部方法不能有多个实现声明
这是一个伪代码:
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);
});
}
}
【问题讨论】:
-
类似于this 的帖子。无法通过
partial拆分方法逻辑。应该先执行哪个方法,或者编译器应该如何知道,如何合并部分方法?来自microsoft docs:A partial method declaration consists of two parts: the definition, and the implementation.1/2 -
您必须从您的方法声明中删除
partial,并将您的逻辑放在您的一个类中。 2/2 -
脚手架代码是硬编码的,没有扩展点。没有机会。
-
EF Core Power Tools 为您完成这项工作
标签: c# entity-framework-core dbcontext partial partial-classes