EF Core TPH Migration - для производных типов ключ не определен - PullRequest
0 голосов
/ 03 января 2019

Миграция EF завершается неудачно и говорит мне, что для производных типов ключ не определен.

Я пытаюсь настроить TPH, что довольно просто с атрибутами, но я не могу заставить его работать сотдельные (свободно) файлы конфигурации.Он всегда сообщает, что ключ производных типов не определен.

Если я определю его для производных типов, то он говорит, что ключ должен быть определен для базового типа.

Тип сущностиконфигурации:

public class CoreEntityConfiguration<TBaseModel> : IEntityTypeConfiguration<TBaseModel> where TBaseModel : class, ICoreEntity
{
    public virtual void Configure(EntityTypeBuilder<TBaseModel> builder)
    {
        builder.Property(p => p.Created).IsDateColumn().HasDefaultValueSql("GETDATE()").ValueGeneratedOnAdd();
        builder.Property(p => p.Modified).IsDateColumn().HasDefaultValueSql("GETDATE()").ValueGeneratedOnAddOrUpdate();
        builder.Property(p => p.Rowversion).IsRowVersion();
    }
}

public class BaseEntityConfiguration<TBaseEntity, TKey> : CoreEntityConfiguration<TBaseEntity> where TBaseEntity : BaseEntity<TKey>
{
    public override void Configure(EntityTypeBuilder<TBaseEntity> builder)
    {
        base.Configure(builder);
        builder.HasKey(p => p.ID);
    }
}

public class EventConfiguration : BaseEntityConfiguration<Event, int>
{
    public override void Configure(EntityTypeBuilder<Event> builder)
    {
        base.Configure(builder);

        builder.ApplyConfiguration(new SearchableConfiguration<Event, int>());

        builder.Property(p => p.Time).IsDateTimeOffsetColumn();

        builder.HasOne(p => p.Player).WithMany(p => p.Events).HasForeignKey(p => p.PlayerID).OnDelete(Microsoft.EntityFrameworkCore.DeleteBehavior.Restrict);

        builder.HasDiscriminator(p => p.EventType)
            .HasValue<Goal>("Goal")
            .HasValue<Card>("Card")
            .HasValue<Substitution>("Substitution");

        builder.ToTableWithSchema(Constants.SCHEME_OPERATIONS);
    }
}

public class EventGoalConfiguration : IEntityTypeConfiguration<Goal>
{
    public void Configure(EntityTypeBuilder<Goal> builder)
    {
        builder.HasBaseType<Event>();

        builder.HasOne(p => p.GoalType).WithMany().OnDelete(DeleteBehavior.Restrict);
        builder.HasOne(p => p.AssistedByPlayer).WithMany(p => p.Assists).HasForeignKey(p => p.AssistedByPlayerID).OnDelete(DeleteBehavior.SetNull);
    }
}

Классы моделей:

public abstract class CoreEntity : ICoreEntity
{
    public DateTime Created { get; set; }
    public int CreatedByID { get; set; }
    public DateTime? Modified { get; set; }
    public int? ModifiedByID { get; set; }
    public byte[] Rowversion { get; set; }
}

public abstract class BaseEntity<TKey> : CoreEntity, IBaseEntity<TKey>
{
    public TKey ID { get; set; }
}

public abstract class Event : BaseEntity<int>
{
    ...
}

public class Goal : Event
{
    public int GoalTypeID { get; set; }
    public virtual GoalType GoalType { get; set; }

    public int? AssistedByPlayerID { get; set; }
    public virtual Player AssistedByPlayer { get; set; }
}

Не могу избавиться от этой ошибки:

Migration error

Пожалуйста, помогитеи скажи мне, что я делаю не так.Я не могу понять это ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...