我有一个带有'LS_GENDER'字段的数据库,它将性别存储为'M'或'F'。
我的应用程序使用名为Gender的枚举来处理性别。
我的实体具有以下字段和属性:
private string _gender;
public Gender Gender { get { return GetGenderFromString(_gender); } };
private Gender GetGenderFromString(string strGender)
{
switch (strGender.ToLower())
{
case "f":
return Gender.Female;
case "m":
return Gender.Male;
default:
return Gender.Unknown;
}
}
如何使用FluentNHibernate进行映射?我正在尝试使用字段访问(如下所示):
Map(x => x.Gender).Column("LS_GENDER").Access.CamelCaseField(Prefix.Underscore);
但我收到错误'无法将F解析为性别'。我认为NHibernate很混乱,因为属性和字段的类型不同。
我该如何映射?
答案 0 :(得分:0)
我猜您正在将数据库字符串值(M,F,U)映射到枚举。
此问题的答案可能有助于您将枚举映射到字符串值。
How do you map an enum as an int value with fluent NHibernate? Mapping custom enum classes with Fluent Nhibernate
您可以使用自定义类型将字符串(M,F,U)映射到您所拥有的枚举。
在枚举类中使用自定义属性指定其字符串值。以下文章可以帮助您完成此操作。
http://david.gardiner.net.au/2007/11/using-enum-types-with-nhibernate.html
希望有所帮助。
答案 1 :(得分:0)
令我非常惊讶的是,这种映射有效:
Map(x => x.Gender).Column("LS_GENDER").Access.CamelCaseField(Prefix.Underscore).CustomType(typeof (string));
因此映射表示'直接访问字段并将其视为字符串,即使相应的属性属于Gender'。
答案 2 :(得分:0)
您使用reveal映射私人字段:
Map(Reveal.Member<ClassType>("_gender")).Column("LS_GENDER");
但这并不能解决您的LINQ问题,因为现在NHibernate不知道Gender属性。要解决这两个问题,我将使用实现IUserType的自定义用户类型。