FluentNHibernate:如何将数据库char映射到c#bool?

时间:2011-09-13 16:06:38

标签: database string nhibernate fluent-nhibernate mapping

我使用FluentNHibernate设置了我的第一个项目。当我试图从单个表中获取记录列表时,我得到一个例外,其中说:

System.FormatException:String未被识别为有效的布尔值。

问题是在数据库表中,有一个名为“flag”的列,其数据类型为char,但它只包含“0”或“1”的值。所以,我想把它映射到我的POCO中的bool类型:

public class Students
{
    public virtual int Id {get; private set;}
    public virtual string FirstName {get; set;}
    public virtual string LastName {get; set;}
    public virtual DateTime RegisterDate {get; set;}
    public virtual bool Flag {get; set;}
}

现在,在我的Mappings.cs中,如何将Flag转换为bool?

public class StudentMap : ClassMap<Students> {
    public StudentMap() {
        Id(x => x.Id);
        Map(x => x.FirstName).Column("first_name");
        Map(x => x.LastName).Column("last_name");
        Map(x => x.RegisterDate).Column("register_date");
        Map(x => x.Flag); // This won't work because 
                          // column "flag" is char, 
                          // whereas x.Flag is bool.

        }
    }

那是问题1.

另外,在数据库中,表名是“学生”,但在我的商业模式中,我想使用单数作为学生,我该怎么做?现在,如果我将我的业务类定义为学生,我将收到一个错误,表示找不到表“学生”这样的内容。

数据库是MySQL,如果重要的话。

感谢您的提示。

2 个答案:

答案 0 :(得分:3)

对于第1部分,在app.config / nhibernate.config / whateverYourNHibernateConfigFile上使用它

<property name="query.substitutions">true 1, false 0</property>

评论后编辑:

如果你使用流利的nhibernate,只需使用它的API,例如

            var props = new Dictionary<string, string>();
            props.Add("query.substitutions","true 1, false 0");
            var sessionFactory = Fluently.Configure().BuildConfiguration().AddProperties(props);

答案 1 :(得分:2)

对于第1部分,在配置对象中,需要将query.substitutions属性设置为true = 1,false = 0。

对于第2部分,应该有一个Table(“”)方法,您可以使用它来指定StudentMap类中的表名。