Raw SQL Query without DbSet - Entity Framework Core

后端 未结 17 1369
眼角桃花
眼角桃花 2020-11-22 13:27

With Entity Framework Core removing dbData.Database.SqlQuery I can\'t find a solution to build a raw SQL Query for my full-text search query th

17条回答
  •  一生所求
    2020-11-22 13:53

    You can use this (from https://github.com/aspnet/EntityFrameworkCore/issues/1862#issuecomment-451671168 ) :

    public static class SqlQueryExtensions
    {
        public static IList SqlQuery(this DbContext db, string sql, params object[] parameters) where T : class
        {
            using (var db2 = new ContextForQueryType(db.Database.GetDbConnection()))
            {
                return db2.Query().FromSql(sql, parameters).ToList();
            }
        }
    
        private class ContextForQueryType : DbContext where T : class
        {
            private readonly DbConnection connection;
    
            public ContextForQueryType(DbConnection connection)
            {
                this.connection = connection;
            }
    
            protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
            {
                // switch on the connection type name to enable support multiple providers
                // var name = con.GetType().Name;
                optionsBuilder.UseSqlServer(connection, options => options.EnableRetryOnFailure());
    
                base.OnConfiguring(optionsBuilder);
            }
    
            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
                modelBuilder.Entity().HasNoKey();
                base.OnModelCreating(modelBuilder);
            }
        }
    }
    

    And the usage:

        using (var db = new Db())
        {
            var results = db.SqlQuery("select 1 id, 'joe' name");
            //or with an anonymous type like this
            var results2 = db.SqlQuery(() => new { id =1, name=""},"select 1 id, 'joe' name");
        }
    

提交回复
热议问题