Я видел несколько подобных вопросов в SO, но я все еще не могу заставить это работать в моем коде, несмотря на то, что мой код выглядит как принятые ответы.
Во-первых, мое отображение (сжато)
public SiteMap()
{
Table("SiteDetail");
Id(x => x.SiteId, "Id").GeneratedBy.Identity();
}
Тогда структура другой таблицы
CREATE TABLE [dbo].[EmailConfig](
[SiteID] [int] NOT NULL,
[Active] [int] NULL,
[HeaderText] [int] NULL,
[TrailerText] [int] NULL,
[BodyText] [int] NULL,
[CopyEmailTo] [varchar](255) NULL,
CONSTRAINT [PK_EmailConfig] PRIMARY KEY CLUSTERED ([SiteID] ASC))
А вот и моя собственность на моем объекте
public virtual bool EmailReceiptsEnabled { get; set; }
А вот отображение для установки этого свойства
Map(x => x.EmailReceiptsEnabled)
.Formula("(SELECT COUNT(e.SiteId) FROM EmailConfig e WHERE e.SiteId = SiteId AND e.Active = 1)");
Когда я комментирую это отображение свойств, все работает нормально. Когда я оставляю его, мой репозиторий возвращает ноль при попытке выбрать один сайт. Не выдается никакой ошибки, кроме исключения пустой ссылки на странице, пытающейся получить доступ к свойству объекта сайта.
EDIT:
Я изменил свое решение, чтобы отодвинуть объект следующим образом:
public class EmailConfiguration : CoreObjectBase
{
public virtual int SiteId { get; set; }
public virtual int Active { get; set; }
}
С недвижимостью в моем Site
классе
public virtual EmailConfiguration EmailConfiguration { get; set; }
И отображение для объекта
public class EmailConfigurationMap : ClassMap<EmailConfiguration>
{
public EmailConfigurationMap()
{
Table("EmailConfig");
Id(x => x.SiteId);
Map(x => x.Active);
}
}
А потом отображение на моем сайте
References(x => x.EmailConfiguration, "Id");
и выдает ошибку
NHibernate.ObjectNotFoundException: строки с данным идентификатором не существует
Проблема заключается в том, что EmailConfig не содержит записи, пока клиент не войдет в приложение для настройки своей электронной почты. Это нельзя изменить, но мне нужно, чтобы мое приложение могло использовать эти данные. Любые идеи о том, как отобразить эту вещь?
Еще одно редактирование
Я смог заставить его работать, изменив свойство на
public virtual IList<EmailConfiguration> EmailConfigurations { get; set; }
А затем реализовать это полное бедствие
HasMany<EmailConfiguration>(x => x.EmailConfigurations)
.KeyColumn("SiteId")
.Inverse();
Думаю, я буду тихо плакать, пока не пойму, как заставить этот беспорядок работать правильно. Так как таблица EmailConfig
использует PK моей таблицы сайта в качестве своего первичного ключа, единственные возможности - иметь 1 или не иметь записей. References
завершается с ошибкой с серьезной ошибкой. HasOne тоже не работает (программа вообще не возвращает мои Site
объекты без каких-либо ошибок).