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

fluent nHibernate:如何持久化使用公式映射的属性?,nhibernate,fluent-nhibernate,formula,fluent-nhibernate-mapping,Nhibernate,Fluent Nhibernate,Formula,Fluent Nhibernate Mapping,我正在处理一个遗留数据库,我们有一个不再有意义的字段,但我不想更改DB模式 我试图将一个旧的DB文本字段映射到一个带有布尔值的类中(只需要知道DB文本字段有一个选项)。我可以使用Forumla从数据库中获取布尔值,但我似乎可以将任何更新保存回数据库 我的类和当前的fluent映射为: public class Bulletin { public virtual int Id { get; set;} public virtual bool RegularBulletin { ge

我正在处理一个遗留数据库,我们有一个不再有意义的字段,但我不想更改DB模式

我试图将一个旧的DB文本字段映射到一个带有布尔值的类中(只需要知道DB文本字段有一个选项)。我可以使用Forumla从数据库中获取布尔值,但我似乎可以将任何更新保存回数据库

我的类和当前的fluent映射为:

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();
    }
}
公开课公告
{
公共虚拟整数Id{get;set;}
公共虚拟布尔规则公告{get;set;}
}
公共类BulletinMapping:ClassMap
{
公共公告
{
表(“公告”);
Id(x=>x.Id,“Id”).GeneratedBy.Identity();
地图(x=>x.RegularBulletin)
.Formula(“当EmailType='BULLETIN_B'然后是1 else null end时的情况”)
.Nullable();
}
}
有没有人对如何坚持正规公告栏有什么想法

谢谢
Saan

我将为此使用一种解决方法-创建一个支持字段
受保护的虚拟字符串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); 

    }
}
公开课公告
{
公共虚拟整数Id{get;set;}
受保护的虚拟字符串RegularBulletinString{get;set;}
公共虚拟图书馆定期公告
{ 
得到
{
返回RegularBulletinString==“公告B”;
} 
设置
{
RegularBulletinString=值?“BULLETIN_B”:空;
}
}
}
公共类BulletinMapping:ClassMap
{
公共公告
{
表(“公告”);
Id(x=>x.Id,“Id”).GeneratedBy.Identity();
地图(x=>x.RegularBulletinString)
.栏(“电子邮件类型”)
.Nullable();
IgnoreProperty(x=>x.RegularBulletin);
}
}

那么在保存时,它在该表列中插入了什么?或者您不能保存任何数据并获取异常?目前它不保存任何内容,也不会出错。它的意思是保存BULLETIN_B或Null您是否希望在更改RegularBulletin的值时更新EmailType值(即RegularBulletin为false,您将其设置为true并保存,并且希望EmailType更新为“BULLETIN_B”)?