3

我想使用 Fluent NHibernate 将只读属性映射到 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)");
}
4

1 回答 1

2

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

您需要执行以下操作:

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

请注意,您将需要空设置器,否则 NHibernate 会抱怨

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

于 2013-02-13T12:43:15.497 回答