cosmosqueryableextensions方法从Sqlraw返回0时返回0时返回参数

问题描述 投票:0回答:1
扩展方法

FromRawSql()

来传递原始查询 - 像这样:
Guid partnerId = new Guid([myPartnerId]) // string interpolated query var queryString = $@"SELECT * FROM c WHERE c.Discriminator = 'testEntity' AND c.PartnerId = '{partnerId}' "; int totalCount = await _context.testEntity.FromSqlRaw(queryString).CountAsync(); // 73 results var parameters = new List<SqlParameter> { new SqlParameter("@Discriminator", "testEntity"), new SqlParameter("@PartnerId", partnerId.ToString()) }; // Parameterized query var queryStringParameterized = $@"SELECT * FROM c WHERE c.Discriminator = @Discriminator AND c.PartnerId = @PartnerId "; int totalCountParameterized = await _context.testEntity.FromSqlRaw(queryStringParameterized, parameters.ToArray()).CountAsync(); // 0 results
问题:

当我运行此功能时,具有插值参数的一个返回73个结果,而另一个带有参数的结果返回0.
有我想念或做错了什么?

cosmosqueryableextensions方法从Sqlraw返回0时返回0时返回参数

c# .net entity-framework-core azure-cosmosdb azure-cosmosdb-sqlapi
1个回答
0
投票
result as 0
,因为,该代码使用EF Core中的参数化SQL查询,而Cosmos DB不支持。以下代码成功地工作,并通过使用

fromsqlraw()

函数将结果显示为
Total count: 2

,并使用

ecorcore参数替换为
{0}, {1}
,它可以与Azure cosmosdb正确地使用Azure cosmosdb,如您在下面的输出中所看到的。
public class AppDbContext : DbContext { public DbSet<Customer> Customers { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseCosmos( "https://<accName>.documents.azure.com:443/", "<primaryKey>", "db1" ); } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Customer>() .ToContainer("cont1") .HasKey(c => c.Id); modelBuilder.Entity<Customer>().HasNoDiscriminator(); } } class Program { static async Task Main() { using (var context = new AppDbContext()) { Guid partnerId = new Guid("550e8400-e29b-41d4-a716-446655440000"); var queryString = @"SELECT * FROM c WHERE c.Discriminator = {0} AND c.PartnerId = {1}"; var customers = await context.Customers .FromSqlRaw(queryString, "testEntity", partnerId.ToString()) .ToListAsync(); foreach (var customer in customers) { Console.WriteLine($"Id: {customer.Id}, Name: {customer.Name}, PartnerId: {customer.PartnerId}"); } Console.WriteLine($"Total count: {customers.Count}"); } } } 输出:
Id: 1, Name: Alice Brown, PartnerId: 550e8400-e29b-41d4-a716-446655440000
Id: 2, Name: John Doe, PartnerId: 550e8400-e29b-41d4-a716-446655440000
Total count: 2

    
	

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.