EF6:使用数据库第一种方法进行全文搜索

时间:2016-11-20 16:11:06

标签: c# entity-framework linq

我发现link if (x > 10) { if (y < 20) {System.out.print("hi"); } } 使if (x > 10 && y < 20) { System.out.print("hi"); } 通过full-text search工作。但是,代码似乎是针对linq。如何使其与database first approach一起使用?

代码的相关部分:

Database First Approach

如上所述,函数public class NoteMap : EntityTypeConfiguration<Note> { public NoteMap() { // Primary Key HasKey(t => t.Id); } } public class MyContext : DbContext { static MyContext() { DbInterception.Add(new FtsInterceptor()); } public MyContext(string nameOrConnectionString) : base(nameOrConnectionString) { } public DbSet<Note> Notes { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Configurations.Add(new NoteMap()); } } 仅在OnModelCreating中调用。我想知道需要改变什么来使链接中的代码适用于Code First Approach方法

3 个答案:

答案 0 :(得分:1)

我建议采用不同的方法。在SQL Server上使用全文搜索创建表值函数,并使用参数从Entity Framework调用它。我项目的简化示例,可以在两个表中搜索全文,并且可以从EF轻松调用:

{{1}}

答案 1 :(得分:1)

数据库优先将所有类生成为部分,包括非常方便的部分OnContextCreated方法。

我目前无法测试,但您可以尝试使用以下代码添加MyContext_FTS.cs文件:

public partial class MyContext
{
    partial void OnContextCreated()
    {         
          DbInterception.Add(new FtsInterceptor());
    }
}

答案 2 :(得分:1)

好的,我尝试完全没有OnModelCreating来实现解决方案,事实证明@Evk建议的FullText拦截器实现甚至都不需要它。