我正在从.NET Framework手动迁移到.NET Core,并致力于EF和DTO。
我不喜欢这个-我已经读过注释不支持索引,因此,目前正在将流利的api和注释混合在一起,这是代码的味道。但是,似乎我必须继续进行此组合。
我的问题是我是否只能使用流利的api才能实现这一目标。我的表既有主键又有唯一的约束。
我的对象看起来像
class Person
{
public int Id {get;set;}
public string UniqueToken {get;set;}
}
但是,我无法添加以下内容
modelBuilder.Entity<Person>()
.HasKey(a => a.Id)
.HasIndex(a => a.UniqueToken).IsUnique(); //this is what I would like to add but I can't.
我尝试了一些似乎很棘手的工作
modelBuilder.Entity<Person>()
.HasKey(a => a.Id);
modelBuilder.Entity<Person>()
.HasIndex(a => a.UniqueToken).IsUnique();
再次,两次添加此条目似乎有点麻烦……Fluent似乎只想简单地链接方法。
我已经阅读过此书,但我却迷失了。是否可以同时添加主键和唯一约束?
答案 0 :(得分:1)
最好通过OnModelCreating
接口将实体配置与IEntityTypeConfiguration
方法分开,如下所示:
public class PersonConfiguration : IEntityTypeConfiguration<Person>
{
public void Configure(EntityTypeBuilder<Person> builder)
{
builder.HasKey(a => a.Id);
builder.HasIndex(a => a.UniqueToken).IsUnique();
}
}
现在,您可以为PersonConfiguration
之类的所有Db实体添加配置,并立即注册所有它们,如下所示:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ApplyConfigurationsFromAssembly(typeof(PersonConfiguration).Assembly);
}
这将使您更加关注和易读!