我想使用Fluent NHibernate将readonly属性映射到Sql Server中的计算列。 该属性是另一个属性的子串。我这样做是为了使子串可索引并具有更好的搜索性能。但是当我在映射中使用公式函数时,该属性不会映射到数据库中的计算列,但是在使用查询时会计算它。
Class Person{
public virtual string name {get; set;}
public virtual string subName {get; set;}
}
Class PersonMap : ClassMap<Person>{
Map(p => p.name);
Map(p => p.subName).Generated.Always().Formula("substring(name, 0, 5)");
}
答案 0 :(得分:3)
您需要复制代码中的功能 - 如果更改name属性,NHibernate默认情况下不会向数据库发送新查询以评估生成的属性。
您需要执行以下操作:
public virtual string subName { get { return name.Substring(0, 5); } set { } }
请注意,你需要空的setter,否则NHibernate会抱怨
编辑:我看到您要索引数据库中的列,因此您需要在数据库中为该表创建计算列。这本身与NHibernate无关,您可以在映射中完全忽略该列(只要在代码中复制它),或者删除.Formula(..)部分(因为它在计算列中指定)已)