У меня есть 2 класса, которые влияют на интерфейс.Интерфейс передается в метод в качестве параметра, а затем используется как класс T в следующем синтаксисе NHibernate
Session.Query<T>()
Однако, поскольку интерфейс реализован двумя классами, SQL-запрос, запускаемый Session.Query - это 2 оператора Select (Select .. from Boy. И Select .. from Girl).
Мне нужно знать, как «преобразовать» параметр IChild в класс, а затем использовать этот класс.для заполнения вызова Session.Query ().
Код приведен ниже.Как видите, у меня есть обходной путь, но он не изящный, и с несколькими классами IChild станет массой дублирующегося кода.
Спасибо!
public interface IChild
{
DateTime Date { get; }
Parent Parent { get; set; }
}
public class Boy : IChild
{
public virtual Parent Parent { get; set; }
public virtual DateTime GraduationDate { get; set; }
public virtual DateTime Date { get { return GraduationDate; } set { } }
}
public class Girl : IChild
{
public virtual Parent Parent { get; set; }
public virtual DateTime WeddingDate { get; set; }
public virtual DateTime Date { get { return WeddingDate; } set { } }
}
public bool Create(IChild entity)
{
//Is there an existing child record for the key details
IChild child = null;
if(entity is Boy)
{
child = Session.Query<Boy>()
.Where(x => x.Date == entity.Date)
.SingleOrDefault();
}
else if (entity is Girl)
{
child = Session.Query<Girl>()
.Where(x => x.Date == entity.Date)
.SingleOrDefault();
}
return child.Parent != null;
}