有人知道如何更改Entity Framework Core约定中主键的默认名称(Id)?没有DataAnnotations
或FluentAPI中的配置。
我正在尝试通过EntityFrameworkCore.Metadata.Builders
的扩展名对其进行更改,例如:
using Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
namespace Project.Extensions.Microsoft.EntityFrameworkCore.Metadata.Builders
{
public sealed class DefaultConvetionsPrimaryKey : IModelConvention
{
public InternalModelBuilder Apply(InternalModelBuilder modelBuilder)
{
foreach (var entity in modelBuilder.Metadata.GetEntityTypes())
{
foreach (var item in entity.GetDeclaredProperties())
{
if(item.Name == "IdTableName")
{
//Set primary key
}
}
}
return modelBuilder;
}
}
}
有可能吗?欢迎其他方式。
感谢和最诚挚的问候。
正如其他人指出的那样,命名约定实际上并没有一个全局设置。我知道实现此目标的唯一方法是遍历所有实体,并使用YourDbContext.OnModelCreating()
方法中的FluentAPI更新其主键。
例如:
protected override void OnModelCreating(ModelBuilder modelBuilder) { foreach (var entity in modelBuilder.Model.GetEntityTypes()) { foreach (var key in entity.GetKeys()) { key.SetName($"pk_{entity.GetSchema()}_{entity.GetTableName()}"); } } }
这将用
pk_<table>
“替代”pk_<schema>_<table>
的默认命名约定。
请注意,这将重命名主键和
复合键。如果只想更改主键,则必须使用以下方法相应地过滤键:foreach (var key in entity.GetKeys().Where(k => k.IsPrimaryKey()))
{
//...
}