当我在 ef core 2.0 中搭建基架时,如何保留自定义数据注释/流畅的 api



我正在将EF core 2与现有数据库一起使用。使用 Scaffold-DbContext 命令对类进行逆向工程。这工作正常。甚至Fluent API也通过正确的数据库字段约束等,例如

. . . .
modelBuilder.Entity<FsReport>(entity =>
            {
                entity.Property(e => e.Bcclist)
                    .IsUnicode(false)
                    .HasDefaultValueSql("('')");
                entity.Property(e => e.Cclist)
                    .IsUnicode(false)
                    .HasDefaultValueSql("('')");
. . . . 

问题是对于 1 个字段,我需要添加自定义数据注释。如果我添加它,那么一旦我重新运行 Scaffold-DbContext -force 命令(例如,如果数据库模式更改(,那么注释将被覆盖并删除。

我能做些什么来避免这种情况?我尝试将其放在同名的不同分部类中,但得到了"该类型已包含以下定义......错误'

非常感谢任何帮助。

我也有类似的情况,我想根据"我的控制之外"数据库更改重新生成脚手架并维护我的自定义DbContext编辑。我通过对生成的DbContext进行子类化来解决此问题(此处将其称为ScaffoldDbContext(。在子类(称为ScaffoldNavigationDbContext(中,我在对modelBuilder进行自定义编辑之前调用base.OnModelCreating

基架代码将实体类生成为部分类,因此我利用并在类中引入这些导航属性。与基架生成的类分开。例如,下面是我的代码,它将"幸存"新的脚手架一代。这可能有一些警告,但我不知道它们,对于我的简单用例,它可以工作。

public partial class ScaffoldNavigationDbContext : ScaffoldDbContext {
    public ScaffoldNavigationDbContext (DbContextOptions options) : base(options) { }
    protected override void OnModelCreating(ModelBuilder modelBuilder) {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<CertMaster>(entity => {
            entity.HasMany(x => x.CertTrans).WithOne(x => x.CertMaster).HasPrincipalKey(x => x.CertId);
        });
    }
}
public partial class CertMaster {
    public List<CertTrans> CertTrans{ get; set; }
}
public partial class CertTrans {
    public CertMaster CertMaster { get; set; }
}

No.如果您坚持运行Scaffold-DbContext(首先使用数据库(,则需要在之后重新添加更改。继续操作的最佳方法是阅读并实现实体框架核心迁移(代码优先(。

相关内容

  • 没有找到相关文章

最新更新