如何使用C# EF Fluent API为值对象的成员属性创建索引
实现方法
你原来的写法无法生效是因为EF Core不能直接在根实体的配置作用域下识别嵌套值对象(Owned Entity)的属性,你需要先将IdCard配置为UserProfile的拥有实体,再在值对象的配置作用域内创建索引,正确配置代码如下:
// UserProfile实体的Fluent配置 builder.OwnsOne(u => u.IdCard, idCardBuilder => { // 为IdCard的No属性创建索引 idCardBuilder.HasIndex(x => x.No); // 可按需补充其他IdCard属性的配置,比如长度、是否必填等 idCardBuilder.Property(x => x.No) .HasMaxLength(18) .IsRequired(false); });
补充说明
- 如果你需要自定义索引名称,可以链式调用
HasName方法:idCardBuilder.HasIndex(x => x.No).HasName("IX_UserProfile_IdCard_No") - 如果你将
IdCard配置为单独表存储(调用ToTable方法),以上索引配置逻辑同样生效 - 不推荐使用字符串形式的弱类型配置
builder.HasIndex("IdCard.No"),这种写法没有编译时类型校验,属性重命名后容易出现运行时错误
内容的提问来源于stack exchange,提问作者sos5020
相关产品推荐
相关产品推荐

