FluentNhibernate-基于来自另一个表的计数的布尔标志

| 我已经在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)\");
当我注释掉该属性映射时,一切正常。当我将其保留时,尝试选择单个站点时,我的存储库将返回null。除了尝试访问站点对象属性的页面上的空引用异常之外,没有引发任何错误。 编辑: 我已经修改了解决方案以像这样拉回一个对象:
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();
我想我会安静地哭泣,直到我弄清楚如何使此混乱工作以正确的方式进行。由于“ 11”表使用我的站点表的PK作为其主键,因此唯一的可能性是拥有1条记录或没有记录。
References
在null上失败,并出现硬错误。 HasOne也不起作用(导致程序完全不拉回我的
Site
对象,没有任何错误)。     
已邀请:

要回复问题请先登录注册