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时返回参数
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