首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Fluent NHibernate生成表索引

在云计算领域中,Fluent NHibernate是一个流行的ORM(对象关系映射)工具,用于将.NET对象映射到关系型数据库中。Fluent NHibernate是一个扩展库,可以让你更简洁地配置NHibernate映射。

在使用Fluent NHibernate生成表索引时,你需要遵循以下步骤:

  1. 安装Fluent NHibernate和NHibernate:

使用NuGet包管理器,在你的项目中安装FluentNHibernate和NHibernate。

代码语言:txt
复制

Install-Package FluentNHibernate

Install-Package NHibernate

代码语言:txt
复制
  1. 创建实体类:

创建一个表示你要映射到数据库的实体类。例如,假设你有一个名为User的实体类,它有一个Id属性和一个Name属性。

代码语言:csharp
复制

public class User

{

代码语言:txt
复制
   public virtual int Id { get; set; }
代码语言:txt
复制
   public virtual string Name { get; set; }

}

代码语言:txt
复制
  1. 创建映射类:

创建一个映射类,用于配置Fluent NHibernate如何将实体类映射到数据库表中。在这个映射类中,你可以指定表名、列名、主键、索引等。

代码语言:csharp
复制

public class UserMap : ClassMap<User>

{

代码语言:txt
复制
   public UserMap()
代码语言:txt
复制
   {
代码语言:txt
复制
       Table("Users");
代码语言:txt
复制
       Id(x => x.Id).GeneratedBy.Identity();
代码语言:txt
复制
       Map(x => x.Name);
代码语言:txt
复制
       Index(x => x.Name).Column("IX_Users_Name");
代码语言:txt
复制
   }

}

代码语言:txt
复制

在上面的代码中,我们创建了一个名为UserMap的映射类,并在构造函数中指定了表名为UsersId列是自增主键,Name列是普通列,并且创建了一个名为IX_Users_Name的索引。

  1. 配置NHibernate:

使用Fluent NHibernate配置NHibernate,并将映射类添加到配置中。

代码语言:csharp
复制

var sessionFactory = Fluently.Configure()

代码语言:txt
复制
   .Database(MsSqlConfiguration.MsSql2012
代码语言:txt
复制
       .ConnectionString(c => c.FromConnectionStringWithKey("myConnectionString")))
代码语言:txt
复制
   .Mappings(m => m.FluentMappings.AddFromAssemblyOf<UserMap>())
代码语言:txt
复制
   .BuildSessionFactory();
代码语言:txt
复制

在上面的代码中,我们使用Fluent NHibernate配置了一个名为myConnectionString的连接字符串,并将映射类添加到配置中。

  1. 使用NHibernate查询数据库:

使用NHibernate查询数据库,并使用Fluent NHibernate生成的索引来优化查询性能。

代码语言:csharp
复制

using (var session = sessionFactory.OpenSession())

{

代码语言:txt
复制
   using (var transaction = session.BeginTransaction())
代码语言:txt
复制
   {
代码语言:txt
复制
       var users = session.QueryOver<User>().List();
代码语言:txt
复制
       transaction.Commit();
代码语言:txt
复制
   }

}

代码语言:txt
复制

在上面的代码中,我们使用NHibernate查询了所有的User对象,并使用Fluent NHibernate生成的索引来优化查询性能。

总结:

使用Fluent NHibernate生成表索引可以帮助你优化数据库查询性能,并简化NHibernate映射配置。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何使用Fluent Nhibernate中的Automapping进行OR Mapping映射

,我们使用Fluent NHibernate的Mapping方式代替XML配置。...使用Fluent NHibernate的最大好处是降低了出错的机会,因为Fluent Nhibernate的配置是使用C#来编写,可以智能感知,而且还能编译,不像原始的XML配置,写错了都不知道。...Fluent NHibernate的配置方式仍然是需要编写Mapping代码的,也就意味着,如果我更改class或者DataTable的时候,还要对应的更改该Mapping文件。...更多的修改意味着更多的风险,为了减少这方面的风险,同时为了减少配置的工作量,所以在最新的项目中采用了Fluent NHibernate中的Automapping。...(比如CostCenter类对应COST_CENTER) 类中的主键使用Id命名,中的主键使用名+“_ID”的命名方式。

1.1K10

Fluent NHibernate之旅二--Entity Mapping

如果你要体验NHibernate的强大,首先你就要学会配置,包括SessionFactory和Mapping的配置。今天跟上一篇一样,会使用传统方式和 NHibernate 进行讲解。...本节内容: 简单实体映射 使用自定义类型映射实体属性 NHibernate的实体映射(Entity Mapping)做的非常好,虽然不是完美,但一些我们经常使用的,基本上已经都支持了,而且配置也相对比较简单...二、使用自定义类型映射实体属性 NHibernate支持我们用自定义的类型来映射属性,但因为我是初学,我真的不会,当然我在网上找到了相关的资料,在此也不多说,就说说Fluent的方式吧,在我映射自定义属性的时候...为了接下来的方便,我把Fluent的Mapping都生成到我传统方式的Mapping目录中,加入到项目,设置成嵌入的资源,一切都为了以后的教程,换句话说以后的教程中,我一般都会使用Fluent来进行映射...前几天的开篇“Fluent NHibernate之旅一”,反响不是很好,或许大家用NHibernate的真的很少,或许我写的不够好,或许。。。。

98590

Fluent NHibernate之旅

本篇内容: 1、初识Fluent NHibernate(简称Fluent) 2、使用NHibernateFluent创建ISessionFactory 3、传统方式和Fluent的对比。...下载地址:http://fluentnhibernate.org/ 二、使用NHibernateFluent创建ISessionFactory 准备工作: 1、下载Fluent类库,其中已经包含了NHibernate...2、下载NHibernate类库,虽然Fluent已经有了最新版本,但我们还需要Proxy的Dll,这里我们使用NHibernate.ByteCode.Castle这个程序集。...传统方式对于一些经常使用的程序员来说非常简便,加上代码生成工具,使用起来也会游刃有余,但对于新手来说,Fluent绝对是一个好帮手。...当然不,Fluent的开发者不仅帮你保留了原有的方式,还可以混合你的配置文件,最有意思的时,你还可以使用它来学习NHibernate,甚至可以使用它来开发你自己的自动代码生成工具,因为我也刚学,先介绍一些简单的

1K60

Fluent NHibernate之旅(三)-- 继承

经过了“开篇”和“简单映射”两篇文章,相信大家对Fluent NHibernate 有了一定的了解了,FluentNHibernate实际就是对 NHibernate 映射的一定扩展,我们能完全利用强类型...从这一篇开始,我们将使用Fluent NHibernate RC 1.0 版来进行演示,先前的代码,我会另外进行说明 继承 在OOP中,继承作为OO中重要的特性,如果NHibernate没有对它的支持,...,好的做法是把子类映射区分开来,等一下你会知道,第一种策略和第二种策略都会采用这样的方式来进行映射,至于映射会使用subclass还好是join-subclass,FluentNHibernate会自动生成的...这种方式结构清晰,而且不会有亢余字段,同时方便扩展,是不错的选择,不过这不是说其他方式没有用,要看你的使用场景。看表结构: ? 这里注意的是,子表的主键不是递增的(废话,呵呵)。...总结 这次说了一下继承的映射方式,其实很早就写好了,正好遇到Fluent NHibernate发布了RC版,所以用了一些时间去学习了下,总的来说,这次升级呢非常好,可能会存在更多的bug,但不影响我们的正常使用

64480

Fluent NHibernate之旅(四)-- 关系(上)

经过了前面三篇的介绍,相信大家对Fluent NHibernate已经有一定的了解了,在我们学习中,Fluent 也已经进入了RTM版本。...这次的版本发布离RC版只有半个月不到,修正了很多bug,同时补充了大量的功能,在每天更新中,也看到了大量的单元测试,我们相信Fluent NHibernate 已经相对稳定成熟了。...Fluent NHibernate之旅系列导航: 一、开篇:ISessionFactory Configuration 二、实体映射:Entity Mapping 三、继承映射:Inheritence...映射 Fluent NHibernate 映射代码: public class UserMap : ClassMap { public UserMap() {...(); 虽然Fluent支持,虽然编译通过,但在创建ISessionFactory的时候,却会抛出异常,因为NHibernate不支持one-to-one的Lazy的特性,也就是说NHibernate不支持一对一的延迟加载

1.2K60

连贯NHibernate 1.0正式发布

连贯NHibernateFluent NHibernate) 是通过编程方式而不是使用XML配置文件创建NHibernate映射的API。...它的目标是在项目中运用NHibernate时减少所遇到的困难,提供更好的可读性、可测试性和编译时的安全性。...连贯NHibernate降低了复杂性,并进一步加强了约定胜于配置的原则,即任何一个映射的最常用设置是默认的。 除了编译时的检查外连贯NHibernate还为你的映射的测试提供了一个健壮的API。...Wiki上有教程告诉怎么用,园子里的inday的几篇文章可以先看一下: [原创]Fluent NHibernate之旅 [原创]Fluent NHibernate之旅二--Entity Mapping...[原创]Fluent NHibernate之旅(三)—继承 codeproject上也有一篇针对RC的文章:Fluent NHibernate and Linq2NHibernate – Demo Project

61670

NHibernate 代码映射实体类

Fluent Mapping 和 Attribute Mapping 不同, 有其独特的设计风格。...下面就通过一个实例来说明怎么使用 NHibernate 自带的代码映射。 实体关系 要映射的类关系图如下: ?...使用 Table 函数将类映射到制定的数据: Table("product"); 标识映射 使用 Id 函数映射标识, NHibernate 提供了内置的工具类来简化代码: Id( m =>...总结 与 xml 映射以及其它第三方映射相比, 使用 NHibernate 代码映射有下面几个优点: 不需要使用 xml 文件即可完成, 可以充分利用 IDE 智能提示, 重构, 以及编译时检查; 与...Attribute Mapping 相比, 对原来的 POCO 实体类没有污染 (Attribute) ; NHibernate 自带, 可以说是一等公民, 而 Fluent Mapping 是第三方维护的

86810

Fluent NHibernate之旅(四)-- 关系(中)

Fluent NHibernate之旅系列导航: 一、开篇:ISessionFactory Configuration 二、实体映射:Entity Mapping 三、继承映射:Inheritence...映射 不得不赞叹一下 Fluent Nhibernate ,有了它,我们的映射一切都变得如此简单,先来看看Model吧,用户的订单列表,对于用户来说,暂时是不需要排序的,所以我们可以使用ISet作为Order...一对多的映射,比起一对一来说还相对的简单点,默认是延迟加载,如果项目中,有些地方,需要立即加载,我们也可以使用 FetchMode.Eager 来加载。...我们在Output中,能看到NHibernate生成的Sql语句,测试也成功,说明我们刚刚是立即加载了Orders属性。...如果您在使用Fluent Nhibernate的时候也遇到了问题,可以及时与我联系或求助于Fluent 的Google Groups。 应“亦续缘”的要求,我把代码整理了下,发上来,便于大家学习。

689100

Fluent Nhibernate之旅(五)--利用AutoMapping进行简单开发

Fluent Nhibernate(以下简称FN)发展到如今,已经相当成熟了,在Nhibernate的书中也相应的推荐了使用FN来进行映射配置,之前写的FN之旅至今还有很多人会来私信我问题,说来惭愧,从...Entity Mapping 三、继承映射:Inheritence Mapping 四、一对一映射:One-to-One Mapping 五、一对多映射:One-to-Many Mapping 六、Fluent...NHibernate之旅(四)-- 关系(下) 安装 现在在项目中使用FN很方便,使用Nuget管理就可以了,但我还是建议大家,可以下载源代码,自己可以详细了解下。...这个其实就是AutoMapping在处理映射的时候,都是按照一定的规则去映射的,细心的朋友可能发现,我们的索引字段的字段名都是Id,这就是AutoMapping的约定,我们也可以自己来进行配置。...Fluent Nhibernate确实是个好东西,让我在开发上省去了很多时间,今天虽然介绍了AutoMapping,但我不推荐您在您的项目中使用,用起来没手感(个人感觉),需要约定的东西太多了,对于数据库结构也得按照他的契约来

92460

Fluent NHibernate RC 1.0 --升级内容

Fluent NHiberante(FNT) RC 1.0 已经在上个星期发布了,其中很多东西被废弃,有些方法改进,还有一些命名更贴切,虽说不是很完美,但已经做的非常完善了,如果大家在使用中,发现bug...Fluent NHibernate Release Notes 1.0 : http://wiki.fluentnhibernate.org/Release_notes_1.0 FNT在映射的时候,分为...Fluent Mapping(手动)和Auto Mapping(自动)两种方式,我在我的“Fluent系列”中一直使用的是手动方式,我觉得相对应的好控制,而且也让我同时能更好的学习NHibernate。...2、丢弃了SetAttribute方法:因为前几个版本的FNT还不够完善,很多NHibernate的Attribute都没有提供支持,所以作者留了这一个方法,以便开发者自定义一些attribute。...3、忽略属性(IgnoreProperty),这个不错,在以前,我们自动映射的时候每个属性不管要不要都映射了,在RC版,我们可以使用如下代码,忽略这些属性不进行映射,非常不错,赞一个。

62350

B+树索引使用(9)分组、回、覆盖索引(二十一)

B+树索引使用(8)排序使用及其注意事项(二十) 用于分组 有时候我们会对一些相同的数据进行分组:SELECT name, birthday, phone, COUNT(*) FROM person_info...用主键id查询聚簇索引的b+树,这时候的id不是相连的,所以是随机I/O,效率比顺序I/O低很多。 所以会使用两个索引,二级索引的时候顺序I/O,效率高很多,聚簇索引的时候随机I/O效率低很多。...所以如果回的主键数据太多,占百分之80以上需要回,那还不如直接聚簇索引扫描查询。...那我们什么时候用全扫描的方式,什么时候用二级索引+回的聚簇索引方式呢?...这个就是神秘的mysql查询优化器需要做的事,查询优化器会先对数据进行统计,然后根据这些数据,来判断是全扫描还是二级索引+回的方式,如果回的数据比较少,就用二级索引+回,比如SELECT * FROM

50831

流畅地HtmlHelper-Asp.Net MVC

今天抛开 Fluent NHibernate 不谈,我们来谈谈 Asp.Net MVC ,在MVC的View中,我们经常会使用HtmlHelper来生成各种html代码(可能描述不太清楚看代码吧,呵呵)...HtmlHelper原先的功能不是很多,还好有很多扩展方法,我们能用它来生成一个Input控件,比如: 我们使用上面的代码能生成一个没有值的单行文本框...随便说个例子,比如你要添加一个产品,可能它会有几十个属性,意味着你要写几十个Html.TextBox(属性值) (这里可以是其他控件),其实也没有什么,不过真的很不爽,可能我习惯了 Fluent NHibernate...的映射方式,我一直想着使用以下的方式来生成控件: (u => u.UserID, Model.User.UserID, new { @class="class...说实在,MVC好像很多地方要使用那种硬编码,实在不爽,所以要改造一个自己适合的环境还真不容易啊。老赵最近弄了个MVCPath,要不就一起放进去?吼吼 本文章演示代码下载

54380
领券