Наследование TPH и EF Code-First - ограничение внешнего ключа на неправильный тип

У меня есть следующее, определенное в схеме TPH:

public abstract class Payment {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int PaymentId { get; set; }

        public DateTime DateOfPayment { get; set; }
        public double Amount { get; set;}
    }

public class PeerPayment : Payment {

    public PeerPayment() { }

    [ForeignKey("FromUser")]
    public User FromUser { get; set; }
    public int FromUserId { get; set; }

    [ForeignKey("ToUser")]
    public int ToUserId { get; set; }
    public virtual User ToUser { get; set; }

}

public class FeaturePayment : Payment {

    [ForeignKey("FromUser")]
    public User FromUser { get; set; }
    public int FromUserId { get; set; }

    public virtual Feature Feature { get; set; }

    public string StripeTokenId { get; set; }
    public string EmailAddress { get; set; }

}

Тогда мои отношения сущности таковы:

public class FeaturePaymentConfiguration : EntityTypeConfiguration<FeaturePayment> {
    public FeaturePaymentConfiguration() {
        HasRequired(s => s.Feature).WithOptional(s => s.FeaturePayment);
    }
}

public class PeerPaymentConfiguration : EntityTypeConfiguration<PeerPayment> {
    public PeerPaymentConfiguration() {
        // One-to-Many
        HasOptional(s => s.Review).WithMany().HasForeignKey(s => s.ReviewId);
    }
}

Идея в том, что Payments может быть одним из двух типов, но только один тип имеет ограничения FK Feature, Когда я делаю следующее:

            var payment = new PeerPayment() {
                FromUserId = user1.UserId,
                ToUserId = user2.UserId,
                DateOfPayment = DateTime.UtcNow
            };
            db.Payments.Add(payment);
            db.SaveChanges(); 

Я получаю ошибку:

Оператор INSERT конфликтовал с ограничением FOREIGN KEY "FK_dbo.Payment_dbo.Feature_PaymentId"

Является ли наследование TPH несовместимым с типо-зависимыми ограничениями FK?

0 ответов

Другие вопросы по тегам