流畅的nHibernate:如何持久化使用公式映射的属性?

时间:2011-08-26 13:26:49

标签: nhibernate fluent-nhibernate formula fluent-nhibernate-mapping

我正在处理遗留数据库,我们有一个没有意义的字段,但我宁愿不改变数据库架构。

我正在尝试将旧的DB文本字段映射到具有布尔值的类(只需知道DB文本字段具有的一个选项)。我可以使用Forumla从数据库中获取布尔值,但我似乎可以将其保存到数据库中。

我的课程和当前流利的映射是:

public class Bulletin
{
    public virtual int Id { get; set;}
    public virtual bool RegularBulletin { get; set;}
}

public class BulletinMapping : ClassMap<Bulletin>
{
    public BulletinMapping()
    {
        Table("Bulletins");
        Id(x => x.Id, "ID").GeneratedBy.Identity();

        Map(x => x.RegularBulletin)
            .Formula("case when EmailType = 'BULLETIN_B' then 1 else null end")
            .Nullable();
    }
}

有没有人对如何持久保存RegularBulletin字段有任何想法?

由于 Saan

1 个答案:

答案 0 :(得分:3)

我会使用一种解决方法 - 创建一个支持字段protected virtual string RegularBulletinString并在其上使用您的布尔转换公式。

public class Bulletin
{
    public virtual int Id { get; set;}
    protected virtual string RegularBulletinString { get; set;}
    public virtual bool RegularBulletin 
    { 
       get
       {
          return RegularBulletinString == "BULLETIN_B";
       } 
       set
       {
          RegularBulletinString = value? "BULLETIN_B" : null;
       }
    }
}

public class BulletinMapping : ClassMap<Bulletin>
{
    public BulletinMapping()
    {
        Table("Bulletins");
        Id(x => x.Id, "ID").GeneratedBy.Identity();

        Map(x => x.RegularBulletinString)
            .Column("EmailType")
            .Nullable();
        IgnoreProperty(x=> x.RegularBulletin); 

    }
}