我有以下示例应用程序,使用 EF Core 中的复杂属性。查询
Customer
DbSet 时,Rider 给出了包含 Address 属性的误报建议。
但是,当尝试按照建议包含
Address
时,会出现运行时异常:
表达式“customer.Address”在“Include”操作中无效,因为它不代表属性访问:“t => t.MyProperty”。要定位在派生类型上声明的导航,请使用强制转换 ('t => ((Derived)t).MyProperty') 或 'as' 运算符 ('t => (t as Derived).MyProperty')。可以通过组合Where、OrderBy(降序)、ThenBy(降序)、Skip 或 Take 操作来过滤集合导航访问。有关包含相关数据的更多信息,请参阅 https://go.microsoft.com/fwlink/?LinkID=746393。
为什么会出现这个提示,我该如何摆脱它?这是 Rider 内部的错误或问题吗?
我知道我可以在该行上方插入
disable
注释来禁用该建议或将其添加到 editorconfig
等,但我正在尝试解决该问题。
using Microsoft.EntityFrameworkCore;
await using var context = new AppDbContext();
context.Database.EnsureCreated();
var customers = await context.Customers
.ToListAsync();
var customerQueryInMemory = customers
.Where(c => c.Address.Street == "123 Main St")
.ToList();
Console.WriteLine(customerQueryInMemory.Count);
internal class AppDbContext : DbContext
{
public DbSet<Customer> Customers { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer("CONNECTION_STRING");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Customer>()
.ComplexProperty(c => c.Address);
}
}
public class Address
{
public string Street { get; set; }
public string City { get; set; }
public string ZipCode { get; set; }
}
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public Address Address { get; set; }
}
这看起来像一个错误。我提交了这个问题:RSRP-499275 False“查询可以返回相关实体的不完整数据”