【问题标题】:Map property whith where condition使用 where 条件映射属性
【发布时间】:2021-09-17 00:50:17
【问题描述】:

我有 3 个实体的一张表: 密码、备注、信用卡。
该表有一个“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");

        }

【问题讨论】:

    标签: c# mapping fluent-nhibernate


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-09
      • 2017-09-25
      • 1970-01-01
      • 2016-03-11
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多