【发布时间】:2019-06-05 19:42:34
【问题描述】:
我正在使用Entity Framework Core tools 从现有数据库中创建实体和 DBContext。
Scaffold-DbContext "Server=XXXXXX;Database=MyDB;User ID=xxxx;Password=xxxxxxx" Microsoft.EntityFrameworkCore.SqlServer -ContextDir .-OutputDir Entities -Force
这个工作。但是有没有办法为所有具有已知接口的实体搭建脚手架?所以我有接口IEntityBase,我希望所有实体都有这个接口
注意 这个问题特定于 EF Core 2+ 和脚手架
更新 1
因此,根据SO Suggesion 我创建了CSharpEntityTypeGenerator 和IDesignTimeServices 接受的答案对于EF Core > 2.* 无效,所以我使用@Chris Peacock 的建议
public class MyEntityTypeGenerator: CSharpEntityTypeGenerator
{
public MyEntityTypeGenerator(ICSharpHelper cSharpHelper)
: base(cSharpHelper)
{
}
public override string WriteCode(IEntityType entityType, string @namespace, bool useDataAnnotations)
{
string code = base.WriteCode(entityType, @namespace, useDataAnnotations);
var oldString = "public partial class " + entityType.Name;
var newString = "public partial class " + entityType.Name + " : EntityBase";
return code.Replace(oldString, newString);
}
}
public class MyDesignTimeServices: IDesignTimeServices
{
public void ConfigureDesignTimeServices(IServiceCollection serviceCollection)
{
serviceCollection.AddSingleton<ICSharpEntityTypeGenerator, MyEntityTypeGenerator>();
}
}
我必须做出一项改变。 CSharpEntityTypeGenerator 构造函数将ICSharpHelper 作为参数而不是ICSharpUtilities
这两个类在Data 程序集中,不是启动项目。
在包管理器控制台我再次执行了脚手架命令。但是我没有看到生成的实体有基类。
脚手架框架如何知道使用我的自定义生成器?我在 serviceCollection 添加生成器,但看起来代码永远不会被执行
我错过了什么吗?
【问题讨论】:
-
@AdamVincent 它不是重复的。我的问题与 .net 核心有关,并且特定于使用 EF Core 工具的脚手架。至少它和你链接的不一样
-
为了清楚起见,您希望脚手架操作在从数据库生成的所有类上附加
.. : IEntityBase? -
@AdamVincent 是,但是 .net.core 使用 EF Core
标签: entity-framework-core ef-core-2.2