У меня есть следующая конфигурация объекта:
public class AgentConfiguration : IEntityTypeConfiguration<AgentEntity>
{
public void Configure(EntityTypeBuilder<AgentEntity> builder)
{
builder.Property(x=> x.AgentId)
.ValueGeneratedOnAdd();
builder.HasKey(x => x.AgentId);
builder.HasDiscriminator(x => x.ObjectType)
.HasValue<AgentEntity>(EntityObjectType.Agent)
.HasValue<GroupEntity>(EntityObjectType.Group);
builder.Property(e => e.Name)
.HasMaxLength(100);
builder.Property(e => e.Mbox)
.HasMaxLength(128)
.HasColumnName("Mbox");
builder.Property(e => e.Mbox_SHA1SUM)
.HasMaxLength(40)
.HasColumnName("Mbox_SHA1SUM");
builder.Property(e => e.OpenId)
.HasColumnName("OpenId");
builder.OwnsOne(x => x.Account, accountBuilder => {
accountBuilder.Property(e => e.HomePage)
.HasColumnName("Account_HomePage")
.HasMaxLength(Constants.MAX_URL_LENGTH);
accountBuilder.Property(e => e.Name)
.HasColumnName("Account_Name")
.HasMaxLength(40);
});
builder
.HasIndex(x => new { x.ObjectType, x.Mbox })
.HasFilter("[Mbox] IS NOT NULL")
.IsUnique();
builder
.HasIndex(x => new { x.ObjectType, x.Mbox_SHA1SUM })
.HasFilter("[Mbox_SHA1SUM] IS NOT NULL")
.IsUnique();
builder
.HasIndex(x => new { x.ObjectType, x.OpenId })
.HasFilter("[OpenId] IS NOT NULL")
.IsUnique();
builder
.HasIndex("ObjectType", "Account_Name", "Account_HomePage")
.HasFilter("[Account_Name] IS NOT NULL AND [Account_HomePage] IS NOT NULL")
.IsUnique();
}
}
Ниже приведена строка, в которой мне сложно настроить, как следует применить фильтр к собственному типу: Account
builder.HasIndex("ObjectType", "Account.Name", "Account.HomePage")
.HasFilter("[Account_Name] IS NOT NULL AND [Account_HomePage] IS NOT NULL")
.IsUnique()
Эта строка не работает, так как у родительского объекта нет свойств с именами: Account.Name или Account.HomePage
Я также попробовал следующее:
builder.HasIndex(new { x.ObjectType, x.Account.Name, x.Account.HomePage})
.HasFilter("[Account_Name] IS NOT NULL AND [Account_HomePage] IS NOT NULL")
.IsUnique()
Но это тоже не работает, я получаю следующий вывод:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation.
---> System.InvalidOperationException: The property 'Account.Name' cannot be added to the type 'AgentEntity' because there was no property type specified and there is no corresponding CLR property or field. To add a shadow state property the property type must be specified.
Я мог бы в итоге получить конфигурацию, в которой Аккаунт живет в новой таблице. Но я бы хотел сделать следующую работу. Любая помощь очень ценится!