MyD*_*ons 1 entity-framework-core asp.net-core-2.2
我正在手动从 .NET Framework 迁移到 .NET Core 并处理 EF 和 DTO。
\n\n我不喜欢这个 - 我读过注释不支持索引,因此,目前我正在混合流畅的 api 和注释,这是一种代码味道。然而,看来我必须继续进行这种组合。
\n\n我的问题是我是否只能通过流畅的 api 来实现这一点。我的表既有主键又有唯一约束。
\n\n我的对象看起来像
\n\nclass Person\n{\n public int Id {get;set;}\n public string UniqueToken {get;set;}\n}\nRun Code Online (Sandbox Code Playgroud)\n\n但是,我无法添加以下内容
\n\nmodelBuilder.Entity<Person>()\n .HasKey(a => a.Id)\n .HasIndex(a => a.UniqueToken).IsUnique(); //this is what I would like to add but I can't.\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试过一些感觉像是一种棘手的解决方法
\n\nmodelBuilder.Entity<Person>()\n .HasKey(a => a.Id);\n\nmodelBuilder.Entity<Person>()\n .HasIndex(a => a.UniqueToken).IsUnique(); \nRun Code Online (Sandbox Code Playgroud)\n\n同样,添加此条目两次似乎有点 bleug\xe2\x80\xa6 Fluent 似乎想要简单地链接这些方法。
\n\n我读过这篇文章,但我很迷失。是否可以同时添加主键和唯一约束?
\n最好将实体配置OnModelCreating与接口方法分开IEntityTypeConfiguration,如下所示:
public class PersonConfiguration : IEntityTypeConfiguration<Person>
{
public void Configure(EntityTypeBuilder<Person> builder)
{
builder.HasKey(a => a.Id);
builder.HasIndex(a => a.UniqueToken).IsUnique();
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您可以为所有数据库实体添加配置PersonConfiguration,并立即注册所有实体,如下所示:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ApplyConfigurationsFromAssembly(typeof(PersonConfiguration).Assembly);
}
Run Code Online (Sandbox Code Playgroud)
这将为您提供更多关注点和可读性的分离!
| 归档时间: |
|
| 查看次数: |
1534 次 |
| 最近记录: |