EF Core FromSqlRaw - 调用在以下方法之间不明确

EF Core FromSqlRaw - The call is ambigous between the following methods

提问人:jong shin 提问时间:11/16/2023 更新时间:11/16/2023 访问量:54

问:

我一直在使用 EF 7 Core for SQL Server,最近添加了 EF 7 Core for Cosmos DB。

但是,在安装 EF Core Cosmos 提供程序后,我收到此错误。

错误 CS0121 调用在以下方法或属性之间不明确:“Microsoft.EntityFrameworkCore.RelationalQueryableExtensions.FromSqlRaw(Microsoft.EntityFrameworkCore.DbSet,字符串,参数对象[])” 和“Microsoft.EntityFrameworkCore.CosmosQueryableExtensions.FromSqlRaw(Microsoft.EntityFrameworkCore.DbSet, string, params object[])”

两种扩展方法都使用相同的命名空间 Microsoft.EntityFrameworkCore,因此,我无法通过指定命名空间来解决此问题。

除了使用命名空间之外,有没有办法选择要使用的扩展方法?

C# .NET 实体框架

评论

0赞 Cid 11/16/2023
代替 ,您可以使用a.MyConflictingExtensionMethod(foo => foo.Bar());MyNamespace.MyConflictingExtensionMethod(a, foo => foo.Bar());
0赞 jong shin 11/16/2023
@Cid这两种扩展方法具有相同的命名空间。所以,我不能使用命名空间来选择。
0赞 Cid 11/16/2023
他们不:vsRelationalQueryableExtensionsCosmosQueryableExtensions
0赞 jong shin 11/16/2023
确实如此。RelationalQueryableExtensions 和 CosmosQueryableExtensions 是类,而不是命名空间。但。。。我想我知道你在说什么。所以,你是说要调用那些像方法,而不是像扩展方法?我认为这会奏效。
0赞 jong shin 11/16/2023
@Charlieface 是的,我正在添加 Cosmos EF 提供程序以使用 Cosmos DB。我使用的是一个命名空间,而不是两个。SQL Server 和 Cosmos DB EF 提供程序扩展方法具有相同的命名空间。

答:

0赞 jong shin 11/16/2023 #1

我刚刚找到了一个解决方法。以前,我将它们用作这样的扩展方法。

context.Set<ABC>().FromSqlRaw("select a from b");

但我意识到我可以像使用常规静态方法一样使用扩展方法。

RelationalQueryableExtensions.FromSqlRaw(context.Set<ABC>(), "select a from b")

CosmosQueryableExtensions.FromSqlRaw(context.Set<ABC>(), "select a from b")

这样,我就可以选择要使用的扩展方法,即使它们具有相同的命名空间。

谢谢你的评论 Cid。