беглый nHibernate: Как сохранить свойство, отображаемое с помощью формулы? - PullRequest
1 голос
/ 26 августа 2011

Я имею дело с устаревшей базой данных, и у нас есть поле, которое больше не имеет смысла, но я бы не стал менять схему БД.

Я пытаюсь отобразить старый текст БДполе в класс с логическим значением (нужно знать только об одной опции, имеющейся в текстовом поле БД).Я могу получить логическое значение из БД с помощью 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 Ответ

3 голосов
/ 26 августа 2011

Я бы использовал обходной путь для этого - создайте вспомогательное поле 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); 

    }
}
...