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

时间:2011-04-12 15:18:05

标签: c# fluent-nhibernate formula calculated-columns

我在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();

我想我会静静地哭,直到我能弄清楚如何让这个混乱以正确的方式运作。由于EmailConfig表使用我的站点表的PK作为其主键,因此唯一的可能性是具有1个记录或没有记录。 References因null而出现错误。 HasOne也不起作用(导致程序根本没有撤回我的Site个对象而没有任何错误。)

0 个答案:

没有答案