У меня есть следующий набор сущностей (пример кода упрощен, я оставил только ключевые и навигационные свойства ниже и удалил все свойства хранения данных)
public class Program
{
public int Id {get;set;}
public virtual ICollection<ProgramUsageSummary> UsageSummaries { get; set; } = new List<ProgramUsageSummary>();
public virtual ICollection<Function> Functions { get; set; } = new List<Function>();
}
public class Function
{
public int Id {get;set;}
public virtual ICollection<FunctionUsageSummary> UsageSummaries { get; set; } = new List<FunctionUsageSummary>();
}
public class ProgramUsageSummary : UsageSummary
{
public int ProgramId { get; set; }
public Program Program { get; set; }
public virtual ICollection<UsageDetail> UsageDetails { get; set; } = new List<UsageDetail>();
}
public class FunctionUsageSummary : UsageSummary
{
public int FunctionId { get; set; }
public Function Function { get; set; }
public virtual ICollection<UsageDetail> UsageDetails { get; set; } = new List<UsageDetail>();
}
public class UsageDetail
{
public int Id { get; set; }
public virtual UsageSummary UsageSummary { get; set; }
public int UsageSummaryId { get; set; }
}
public abstract class UsageSummary
{
public int Id { get; set;}
}
A Program
может иметь ноль илимного ProgramUsageSummaries
.
Каждый из ProgramUsageSummaries
может иметь один или несколько UsageDetails
.
A Program
также может иметь ноль или несколько Functions
, каждый из которых может иметь ноль или несколько FunctionUsageSummaries
, и каждый из них будет иметь один или несколько UsageDetails
.
При такой настройке я получаю следующую ошибку:
Введение ограничения FOREIGN KEY 'FK_dbo.UsageSummaries_dbo.Programs_ProgramId' в таблице 'UsageSummaries' может вызвать циклы или несколько каскадных путей.Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION, или измените другие ограничения FOREIGN KEY
Как сохранить полиморфный дизайн (из UsageSummary
) и избавиться от этой ошибки?