Как задать один внешний ключ
Как из двух внешних ключей сделать один?
Имееются 2 таблицы Cat и Dog. Сущности:
public abstract class AnimalEntity
{
public Guid Id { get; set; }
public string Name { get; set; }
public AnimalType Type { get; set; }
public AnimalBreed Breed { get; set; }
public IEnumerable<Feeding> Feedings { get; set; }
}
public class Cat : AnimalEntity
{
public decimal Weight { get; set; }
}
public class Dog : AnimalEntity
{
public decimal TailLength { get; set; }
}
Также есть таблица с кормлением этих животных.
public class Feeding
{
public Guid Id { get; set; }
public DateTime Date { get; set; }
public Food Food { get; set; }
public int Count { get; set; }
[ForeignKey("CatId")]
public Cat Cat { get; set; }
[ForeignKey("DogId")]
public Dog Dog { get; set; }
}
Она имеет два внешних ключа. Как сделать так чтобы в таблице находился только один столбец содержащий эти внешние ключи?
Констекст
public DbSet<AnimalBreed> AnimalBreeds { get; set; }
public DbSet<Food> Foods { get; set; }
public DbSet<Cat> Cats { get; set; }
public DbSet<Dog> Dogs { get; set; }
public DbSet<Feeding> Feedings { get; set; }
public DataContext(DbContextOptions<DataContext> options) : base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<AnimalBreed>().Property(e => e.Type)
.HasConversion(
x => x.ToString(),
v => (AnimalType)Enum.Parse(typeof(AnimalType), v));
modelBuilder.Entity<Cat>().Property(e => e.Type)
.HasConversion(
x => x.ToString(),
v => (AnimalType)Enum.Parse(typeof(AnimalType), v));
modelBuilder.Entity<Dog>().Property(e => e.Type)
.HasConversion(
x => x.ToString(),
v => (AnimalType)Enum.Parse(typeof(AnimalType), v));
modelBuilder.Entity<Food>().Property(e => e.Type)
.HasConversion(
x => x.ToString(),
v => (AnimalType)Enum.Parse(typeof(AnimalType), v));
}
Ответы (1 шт):
Автор решения: Xamdi59
→ Ссылка
Должно работать, но у этого есть ограничения
public class Animal
{
public Guid Id { get; set; }
[ForeignKey("AnimalTypeId")]
public AnimalType AnimalType { get; set; }
public Guid AnimalTypeId { get; set; }
}
public class AnimalType
{
[ForeignKey("Animal")]
public Guid Id { get; set; }
public Animal Animal { get; set; }
[ForeignKey("FeedingId")]
public Feeding Feeding { get; set; }
public Guid FeedingId { get; set; }
public string Name { get; set; }
}
public class Feeding
{
[ForeignKey("AnimalType")]
public Guid Id { get; set; }
public AnimalType AnimalType { get; set; }
}