我搜索过,我相信我知道答案。但我要问,只是为了确保......
我一直在EF Core 2.0模型中创建自有类型,并且到目前为止已经完成了......怪癖。我当前的问题是创建一个索引,其中包含来自另一个实体内的我拥有的类型的一个或多个属性。
基本上,据我所知,拥有的类型遇到的问题与尝试索引导航属性(以及BTW, awesome 作业MS选择异常文本告诉你没有关于实际问题...)。但是,使用导航属性,您可以使用字符串名称版本并引用shadow属性。我没有运气尝试拥有自己的类型 - 看起来EF并没有创建"阴影属性"对他们来说引用实际列名称错误,因为它不是模型上定义的属性名称(并且似乎确认了我的"没有阴影属性"想到);并且nameof
不能处理子对象,并且可能会给出错误的名称。
所以我采用的方法是尽可能多地使用Fluent API创建索引,然后在迁移脚本中直接添加我需要的其他列。虽然它有效,但由于我希望显而易见的原因,这是次优的。
那我错过了什么?我确实想要使用自有类型,但是给出了重命名的Vortex和#34;关于迁移,现在,我已经接近说"拧它",将它们拉出来,并手动重新进行,如果没有其他原因,除了避免与我的其他人球队。显然这是一个相对较新的功能,但我很难理解为什么它会在它所处的状态下发布......
答案 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);
});
}
}