索引和拥有的类型

时间:2018-03-08 15:31:01

标签: entity-framework-core ef-core-2.0

我搜索过,我相信我知道答案。但我要问,只是为了确保......

我一直在EF Core 2.0模型中创建自有类型,并且到目前为止已经完成了......怪癖。我当前的问题是创建一个索引,其中包含来自另一个实体内的我拥有的类型的一个或多个属性。

基本上,据我所知,拥有的类型遇到的问题与尝试索引导航属性(以及BTW, awesome 作业MS选择异常文本告诉你没有关于实际问题...)。但是,使用导航属性,您可以使用字符串名称版本并引用shadow属性。我没有运气尝试拥有自己的类型 - 看起来EF并没有创建"阴影属性"对他们来说引用实际列名称错误,因为它不是模型上定义的属性名称(并且似乎确认了我的"没有阴影属性"想到);并且nameof不能处理子对象,并且可能会给出错误的名称。

所以我采用的方法是尽可能多地使用Fluent API创建索引,然后在迁移脚本中直接添加我需要的其他列。虽然它有效,但由于我希望显而易见的原因,这是次优的。

那我错过了什么?我确实想要使用自有类型,但是给出了重命名的Vortex和#34;关于迁移,现在,我已经接近说"拧它",将它们拉出来,并手动重新进行,如果没有其他原因,除了避免与我的其他人球队。显然这是一个相对较新的功能,但我很难理解为什么它会在它所处的状态下发布......

1 个答案:

答案 0 :(得分:6)

您可以为自有类型定义索引,尝试使用EF core 2.1 preview 2

public class MainEntityTypeConfiguration : IEntityTypeConfiguration<MainEntity>
{
    public void Configure(EntityTypeBuilder<MainEntity> builder)
    {
        builder.ToTable(nameof(MainEntity));
        builder.Ignore(b => b.DomainEvents);

        builder.HasKey(x => x.MainEntityId);
        builder.HasIndex(x => x.AnyPropFromMainEntity);

        builder.OwnsOne(x => x.ValueObjectInsideMainEntity, xx =>
        {
            xx.HasIndex(o => o.ValueObjectsProp);
            xx.Property(o => o.ValueObjectsProp2).HasMaxLength(256);
        });
    }
}