Допустим, у вас есть следующие модели:
public class Dog {
public int DogId { get; set; }
public string Name { get; set; }
}
public class Cat {
public int CatId { get; set; }
public string Name { get; set; }
}
// This model/table allows us to link multiple colors to an animal
// Lets say type of 1 is dog, 2 is cat for simplicity
public class AnimalColor {
public int ObjectId { get; set; }
public int TypeId { get; set; }
public virtual Color Color { get; set; }
}
public class Color {
public int ColorId { get; set; }
public string Description { get; set; }
}
Проблема этой архитектуры заключается в том, что AnimalColor технически является свойством навигации как Dog, так и Cat, но его сложность не позволяет использовать встроенные функции, такие как связь между AnimalColor и Color.
Отношения между Dog и AnimalColor имеют условие TypeId, не говоря уже о том, что ForeignKey не будет работать должным образом, поскольку имена ключей не совпадают (DogId и ObjectId).
У меня такой вопрос: я что-то упускаю из-за этого? Если нет, то как лучше всего справиться с ситуацией такого типа, если я хочу получить список собак с AnimalColors в качестве свойства?
В настоящее время единственное решение, которое у меня есть для этого, - вытащить два списка и взять цвета, пока я перебираю Собак. Похоже, должен быть более элегантный способ.