EF Core安装Cosmos DB后FromSqlRaw调用歧义错误解决咨询
解决EF Core中FromSqlRaw扩展方法的调用歧义问题
当同时引用SQL Server和Cosmos DB的EF Core提供程序时,FromSqlRaw扩展方法会出现调用歧义,以下是几种无需通过命名空间排除的解决方式:
直接调用静态类的方法
扩展方法本质是静态类中的静态方法,因此可以跳过扩展方法的语法糖,直接指定具体的静态类来调用:// 使用SQL Server的FromSqlRaw Microsoft.EntityFrameworkCore.RelationalQueryableExtensions.FromSqlRaw(yourDbSet, "SELECT * FROM ...", parameters); // 使用Cosmos DB的FromSqlRaw Microsoft.EntityFrameworkCore.CosmosQueryableExtensions.FromSqlRaw(yourDbSet, "SELECT * FROM ...", parameters);为静态类设置using别名
在文件顶部为目标静态类定义别名,简化后续调用:// 定义别名 using SqlRawSqlServer = Microsoft.EntityFrameworkCore.RelationalQueryableExtensions; using SqlRawCosmos = Microsoft.EntityFrameworkCore.CosmosQueryableExtensions; // 调用时使用别名 SqlRawSqlServer.FromSqlRaw(yourDbSet, "SELECT * FROM ...", parameters);封装自定义扩展方法
针对不同数据库创建专属的扩展方法,避免直接调用原生方法产生歧义:public static class CustomQueryableExtensions { public static IQueryable<TEntity> FromSqlRawSqlServer<TEntity>(this DbSet<TEntity> dbSet, string sql, params object[] parameters) where TEntity : class { return Microsoft.EntityFrameworkCore.RelationalQueryableExtensions.FromSqlRaw(dbSet, sql, parameters); } public static IQueryable<TEntity> FromSqlRawCosmos<TEntity>(this DbSet<TEntity> dbSet, string sql, params object[] parameters) where TEntity : class { return Microsoft.EntityFrameworkCore.CosmosQueryableExtensions.FromSqlRaw(dbSet, sql, parameters); } }之后在代码中直接调用
yourDbSet.FromSqlRawSqlServer(...)或yourDbSet.FromSqlRawCosmos(...)即可。
内容的提问来源于stack exchange,提问作者jong shin
相关产品推荐
相关产品推荐

