映射 属性 与 where 条件

Map property whith where condition

我有一个 table 用于 3 个实体: 密码、备注、信用卡。
table 有一个“EntityType”列。 例如,密码的值为“P”。
我如何制作映射,以便它只需要 EntityType = 'P'

的那些行
        public PasswordEntityMap()
        {
            Table(Constants.EntitiesTable);
            Id(x => x.Id).GeneratedBy.Increment();
            Map(x => x.Site);
            Map(x => x.Login);
            Map(x => x.Password);

            Map(x => x.EntityType);     <------- where EntityType = 'P'

            HasMany(x => x.Attachments)
                .Cascade.All()
                .Table(Constants.EntityAttachmentTable)
                .KeyColumn("EntityId");

        }

您可以为此使用鉴别器值。

public sealed class PasswordEntityMap : ClassMap<PasswordEntity>
{
    public PasswordEntityMap()
    {
        Id(x => x.Id).GeneratedBy.Increment();
        Map(x => x.Site);
        Map(x => x.Login);
        Map(x => x.Password);

        Map(x => x.EntityType);

        DiscriminateSubClassesOnColumn("EntityType", "P")
            .AlwaysSelectWithValue();
    }
}

然后,当您对 PasswordEntity 执行 QueryOver 时,只会检索带有“P”的实体。

 var onlyPasswordEntities = _session.QueryOver<PasswordEntity>().List();