Наследование 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?