1

我正在处理遗留数据库,并且我们有一个没有意义的字段,但我宁愿不更改数据库模式。流利nHibernate:如何持久化与公式映射的属性?

我试图将一个旧的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

+0

那么它在保存时在表格列中插入了什么?或者你能否保存任何数据并得到异常? – VoodooChild

+0

目前它不保存任何内容并且不会出错。它的意思是保存BULLETIN_B或null – Saan

+0

您是否希望在更改RegularBulletin的值时更新EmailType值(即RegularBulletin为false,您将其设置为true并保存并希望EmailType更新为“BULLETIN_B” “)? – docmanhattan

回答

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

    } 
} 
+0

完美,谢谢 – Saan