【发布时间】:2017-02-06 11:43:21
【问题描述】:
知道如何更改 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;
}
}
}
有可能吗?欢迎其他方式。
谢谢和最好的问候。
【问题讨论】:
-
您无法更改约定。这是开发人员做出和构建框架的一组假设。但是,它们确实允许 configuration 来改变那些(你想要的),但他们允许的方式是通过使用属性(DataAnnotations)或 Fluent API,你说你不这样做想做。
-
顺便说一下,我们可以使用EntityTypeBuilder,entity.HasKey(e => e.IdTableName)或者[Key]注解。谢谢 krillgar。
-
是的。这些就是我提到的属性和 Fluent API。
标签: c# asp.net entity-framework-core ef-fluent-api