【发布时间】:2022-01-26 06:19:20
【问题描述】:
我正在尝试建立一个表命名约定,以便表名是命名空间和类的组合。例如
namespace Sales;
public class Order { }
将转换为Sales_Order 的表名。
我已经为个别班级制定了这个办法
builder.ToTable($"{typeof(Order).Namespace}_{typeof(Order).Name}");
如果没有明确设置ToTable,我想将此设置为所有表的默认值。
protected override void OnModelCreating(ModelBuilder builder)
{
foreach(var entityType in builder.Model.GetEntityTypes())
{
if(entityType.ClrType == null) { continue; }
{
string tableName = entityType.GetTableName();
string tableNamespace = entityType.GetType().Namespace;
entityType.SetTableName($"{tableNamespace}_{tableName}");
}
}
}
但我无法获取实体类的命名空间。而是返回Microsoft.EntityFrameworkCore.Metadata.Internal
我的实体将位于多个不同的类库中,因此我希望在模型构建器中拦截并更改名称。
关于如何在模型构建器中确定实体的命名空间有什么建议吗?
【问题讨论】:
标签: c# entity-framework-core ef-core-6.0