1

私はレガシーデータベースを扱っており、もはや意味をなさないフィールドがありますが、DB スキーマを変更したくありません。

古いDBテキストフィールドをブール値を持つクラスにマップしようとしています(DBテキストフィールドにある1つのオプションについて知る必要があるだけです)。Forumla を使用して DB からブール値を取得できますが、DB に更新を保存するためにそれを取得できるようです。

私のクラスとそれに対する現在の流暢なマッピングは次のとおりです。

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 フィールドを永続化する方法について何か考えがある人はいますか?

ありがとうサーン

4

1 に答える 1

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

    }
}
于 2011-08-26T15:24:05.573 に答える