我已经完成了我的SQLServer数据库的搭建。
并在指定的文件夹中创建POCO对象。我想做的是它是从我的基础课扩展而来的。我还使用存储库模式,因此我需要在每个实体上都具有Id key ,并且我不想在每次重新分配数据库时都进行更改。

脚手架模型示例

public partial class Food
{
     public int Id { get; set; }
     public string Name { get; set; }
     public string Description { get; set; }
     public double Price { get; set; }
}

预期结果:
public partial class Food : EntityBase
{
     public string Name { get; set; }
     public string Description { get; set; }
     public double Price { get; set; }
}

public class EntityBase : IEntityBase
{
    public int Id { get; set; }
}

最佳答案

您可以使用DbContextWriterEntityTypeWriter自定义支架输出。

在较新版本的实体核心编写器中,重命名为:

  • DBContextWriter == >> CSharpDbContextGenerator
  • EntityTypeWriter == >> CSharpEntityTypeGenerator

  • 编写一些自定义类型编写器,您可以覆盖所有内容,您将获得自己的代码生成器:
    //HERE YOU CAN CHANGE THE WAY TYPES ARE GENERATED AND YOU CAN ADD INTERFACE OR BASE CLASS AS PARENT.
    public class CustomEntitiyTypeWriter : EntityTypeWriter
    {
        public CustomEntitiyTypeWriter([NotNull] CSharpUtilities cSharpUtilities)
            : base(cSharpUtilities)
        { }
    
        // Write Code returns generated code for class and you can raplec it with your base class
        public override string WriteCode([NotNull] EntityConfiguration entityConfiguration)
        {
            var classStr = base.WriteCode(entityConfiguration);
    
            var defaultStr = "public partial class " + entityConfiguration.EntityType.Name;
            var baseStr = "public partial class " + entityConfiguration.EntityType.Name + " : EntityBase";
    
            classStr = classStr.Replace(defaultStr, baseStr);
    
            return classStr;
        }
    }
    

    在安装程序中声明它:
    public static void ConfigureDesignTimeServices(IServiceCollection services)
               => services.AddSingleton<EntityTypeWriter, CustomEntitiyTypeWriter>();
    

    然后使用脚手架数据库,您可以使用CustomDBContextWriter对DBContext执行相同的操作。

    09-25 18:30