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