Entity Framework 中使用SQL Server全文索引(Full Text Search)

GitHub:https://github.com/fissoft/Fissoft.EntityFramework.Fts

EntityFramework中原来使用全文索引有些麻烦,需要使用DbContext.Database.SqlQuery或Execute去直接执行SQL。那样不能靠编译来检查读法错误,重构也不方便。

不过EF6增加Interceptor,可以执行前置和后置操作。

Eg:

 public class FtsInterceptor : IDbCommandInterceptor
    {
        #region interface impl

        public void NonQueryExecuting(DbCommand command, DbCommandInterceptionContext<int> interceptionContext)
        {
        }

        public void NonQueryExecuted(DbCommand command, DbCommandInterceptionContext<int> interceptionContext)
        {
        }

        public void ReaderExecuting(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
        {
        }

        public void ReaderExecuted(DbCommand command, DbCommandInterceptionContext<DbDataReader> interceptionContext)
        {
        }

        public void ScalarExecuting(DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
        {

        }

        public void ScalarExecuted(DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
        {
        }

        #endregion
}

  与Filter或其它Aop框架差不多,这里提供了一共6个方法,分别是在ScalarExecute,NonQueryExecute,ReaderExecute 这三种查询 前置及后置操作

一般来说,使用全文索引是为了查询数据,所以ScalarExecute,ReaderExecute这两种查询的前置方法需要我们改写,具体改写的原理是,将DbCommand中的CommandText读取出来,然后处理成支持全文索引的格式。

细节请参考GitHub的代码:https://github.com/fissoft/Fissoft.EntityFramework.Fts

使用时按以下方法即可

1.通过Nuget引用,或下载GitHub上的代码编译

PM> Install-Package Fissoft.EntityFramework.Fts

2.然后在程序启动时执行以下读句添加拦截器

    DbInterceptors.Init()

3.执行查询时可以使用以下几种方法

    db.Tables.Where(c=>c.Fullname.Contains(FullTextSearchModelUtil.Contains("code")));
    db.Tables.Where(c=>c.Fullname.FreeText(FullTextSearchModelUtil.Contains("code ef")));
    db.Tables.Where(c=>"*".Contains(FullTextSearchModelUtil.ContainsAll("code ef")));
    db.Tables.Where(c=>"*".Contains(FullTextSearchModelUtil.FreeTextAll("code ef")));
				
时间: 2024-10-05 11:55:35

Entity Framework 中使用SQL Server全文索引(Full Text Search)的相关文章

在Linq to sql 和 Entity framework 中使用lambda表达式实现left join

我们知道lambda表达式在Linq to sql 和 Entity framework 中使用join函数可以实现inner join,那么怎么才能在lambda表达式中实现left join呢?秘诀就是在join后面加上一个函数DefaultIfEmpty函数,实际上这个函数在linq中貌似也只有将inner join转换为left join的作用,示例如下 var joinResult = DB.Table1s.Join(DB.Table2s, a => a.id, b => b.id,

2014-07-30 MVC框架中对SQL Server数据库的访问

今天是在吾索实习的第16天.我自己主要学习了基于MVC框架的系统的开发时,对SQL Server数据库的相关访问.其步骤如下: 第一步,在Models文件夹中创建一个类,并命名为Movies.cs,如图1所示: 图1 第二步,在上述Movies.cs文件中的namespace MvcTest.Models{}中输入如下代码: 1 public class Movie 2 { 3 public int ID { get; set; } 4 public string Title { get; se

Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询

Visual Studio Entity Framework (EF) 生成SQL 代码 性能查询 SQL 中,有SQL Server Profiler可以用来查询性能以及查看外部调用的SQL代码. 但是,EF 连接MYSQL 之后,部分代码没法查询EF生成的SQL 代码,如下代码: db.BaseDept.Remove(basedept)的时候, db.BaseDept打断点,查询到的是select 语句, Remove之后,就变成执行结果了,具体生成的DELETE 的SQL 代码无法查看.

SQL Server 全文索引介绍(转载)

概述 全文引擎使用全文索引中的信息来编译可快速搜索表中的特定词或词组的全文查询.全文索引将有关重要的词及其位置的信息存储在数据库表的一列或多列中.全文索引是一种特殊类型的基于标记的功能性索引,它是由 SQL Server 全文引擎生成和维护的.生成全文索引的过程不同于生成其他类型的索引.全文引擎并非基于特定行中存储的值来构造 B 树结构,而是基于要编制索引的文本中的各个标记来生成倒排.堆积且压缩的索引结构.在 SQL Server 2008 中,全文索引大小仅受运行 SQL Server 实例的

SQL Server 全文索引创建

在安装数据库管理系统SQL Server 后,默认情况下全文索引的服务是没有开启的 ,所以首先需要先开启服务,在sql server配置管理器中 (sql server configuration Manager)中点击sql server services ,选中SQL Full-text filter daemon Lunch,点击属性在Log On  lab 查看是否启动该服务,如果没有 启动 ,在services里面选择将其启动 .并且在Log On Lab 界面选择Local Syst

C# Entity Framework中的IQueryable和IQueryProvider详解

前言 相信大家对 Entity Framework 一定不陌生,我相信其中Linq To Sql是其最大的亮点之一,但是我们一直使用到现在却不曾明白内部是如何实现的,今天我们就简单的介绍IQueryable和IQueryProvider. IQueryable接口 我们先聊聊这个接口,因为我们在使用EF中经常看到linq to sql语句的返回类型是 IQueryable ,我们可以看下这个接口的结构: 代码如下: public interface IQueryable : IEnumerabl

SQL Server 全文索引的管理

全文索引不同于常见的聚集索引或非聚集索引,这些索引的内部实现是平衡树(B-Tree)结构,而全文索引在物理上是由一系列的内部表(Internal tables)构成的,这些内部表称作全文索引片段(Fragment),每一个索引片段也叫做一个倒转索引(Inverted index),也就是说,每一个倒转索引都是由一个内部表(Internal Table)实现的. 有一些好奇的朋友可能会发问:“为什么一个全文索引是由一系列的倒转索引构成的,而不是一个?为什么叫做倒转索引,把什么倒转了?” 当新建全文

[Entity Framework] Code First @ SQL Compact EF6.1

前几天 EF6.1 才刚 RTM,EntityFramework.SqlServerCompact 也一并到 6.1 了 准备环境 从 Extensions and Updates下载 SQL Server Compact Toolbox 从 NuGet下载 EntityFramework.SqlServerCompact 6.1.0 参考上篇使用 Code First http://www.dotblogs.com.tw/yc421206/archive/2014/01/20/141712.a

SQL安装过程中“针对SQL Server 注册表的一致性验证“出错解决方式

1.打开注册表,查找到[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\0804],分别打开Counter 和Help 2.打开Counter,把滚动条拉倒最后,然后记下最大的那个值(不同计算机不一样的),记下后关闭窗口 3.同样的打开Help,滚动到最后记最大的那个值(你们的值不一定跟我一样的哦!!!),记下后关闭窗口 4,再重新定位到Perflib的节点上, 5.双击Last Counter然后在