Учитывая 2 несвязанных класса, один из которых является членом другой иерархии наследования, как я могу сопоставить интерфейс для обоих классов, чтобы я мог выполнять запросы к интерфейсу и получить соответствующий конкретный тип?Например,
public abstract class Survey
{
public Guid Id { get; private set; }
}
public class InviteOnlySurvey : Survey
{
public ICollection<Invite> Invites { get; private set; }
}
public class Invite : ISurveyGateway
{
public Guid Id { get; private set; }
public InviteOnlySurvey Survey { get; private set; }
}
public class SharedSurvey : Survey, ISurveyGateway { ... }
public interface ISurveyGateway
{
Guid Id { get; }
}
. В настоящее время я сопоставил Survey, InviteOnlyLiveSurvey и SharedLiveSurvey, используя таблицу для каждой иерархии классов, и теперь я пытаюсь выяснить, как сопоставить ISurveyGateway, чтобы я мог выполнить запрос к нему и дать NHibernate найти соответствующую сущность.(Пригласить или SharedLiveSurvey) без проблем.Экземпляры ISurveyGateway эффективно доступны только для чтения, поскольку все остающиеся проблемы постоянства управляются с помощью сопоставлений для SharedSurvey и Invite.
Если я удаляю интерфейс ISurveyGateway из SharedSurvey или Invite, я могу запрашивать и получать экземпляры ISurveyGateway через NHibernate, нокак только я применяю интерфейс к двум различным иерархиям, я получаю исключение с сообщением «Неоднозначное сохранение для ISurveyGateway, реализованного несколькими иерархиями» (что ожидается - я просто не знаю, как заставить это работать).