我正在使用Entity Framework Core工具从现有数据库创建实体和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建议,我创建了
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
中,但似乎代码从未被执行过。
我有什么遗漏吗?