У меня есть сценарий, в котором класс с именем «Comment» ссылается на абстрактный тип с именем «Entity».Fluent-ClassMap выглядит очень похоже на следующее для свойства "Entity":
classMap.ReferencesAny(x => x.Entity)
.EntityTypeColumn("DiscriminatorType")
.EntityIdentifierColumn("DiscriminatorId")
.IdentityType<int>()
.AddMetaValue(typeof(Car), typeof(Car).Name);
.AddMetaValue(typeof(House), typeof(House).Name);
Как вы, возможно, уже обнаружили из приведенного выше примера, класс "Entity" подклассируется классом с именем "House"и класс под названием «Автомобиль».При такой настройке довольно просто получить все комментарии для определенного «объекта», просто выполнив что-то вроде следующего: Session.Query (). Где (m => m.Entity == myCarObject) .ToList ().Все работает как шарм.
Вот упрощенная структура класса:
abstract class Entity{}
class Car : Entity{}
class House : Entity{}
class Comment
{
public virtual Entity { get; set;}
}
Однако в одном случае использования мне нужно извлечь все экземпляры «Comment», которые ссылаются на любой «Car».Другими словами, я пытаюсь добиться чего-то вроде следующего:
var allCommentsOnCars1 = Session.Query<Comment>().Where(m => m.Entity is Car); //or
var allCommentsOnCars2 = Session.Query<Comment>().Where(m => m.Entity.GetType() == typeof(Car));
Оба примера не работают (последний бросает GetType () - не реализованное исключение), но возможно ли это как-то решить??Скорее всего, я мог бы легко очистить свои проблемы, создав две отдельные таблицы: одну для всех комментариев "Cars", а другую для всех комментариев "Houses", но я бы не хотел менять ни структуру базы данных, ни модели в данный момент.
Ваша обратная связь будет принята с благодарностью.