Fluent NHibernate-是否可以将属性映射到Sql Server中的持久化计算列



我想使用Fluent NHibernate将只读属性映射到Sql Server中的计算列。该属性是另一个属性的子字符串。我这样做是为了使子字符串可索引,并具有更好的搜索性能。但当我在映射中使用Formula函数时,该属性不会映射到数据库中的计算列,而是在使用查询时计算的。

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

您需要复制代码中的功能-如果更改名称属性,NHibernate默认情况下不会向数据库发送新的查询来评估生成的属性。

你需要做一些类似的事情:

 public virtual string subName { get { return name.Substring(0, 5); } set { } }

请注意,您将需要空的setter,否则NHibernate将投诉

编辑:我看到您想要对数据库中的列进行索引,所以您需要为数据库中的表创建一个计算列。这本身与NHibernate无关,您可以完全忽略映射中的列(只要您在代码中复制它),也可以删除.Formula(..)部分(因为它已经在计算列中指定)

相关内容

最新更新