是否可以从具有延迟加载的导航属性的模型创建DbQuery?当我尝试这样做时,出现以下错误
从“ Castle.Proxies.ExtendedStudentProxy”的“前缀”中获取值->由于是查询类型,因此无法跟踪“ ExtendedStudent”类型的实例,只能跟踪实体类型。
我认为DbQuery是只读的,因此不应该将它们不作为默认行为进行跟踪吗?我错了吗?
这是我使用的代码示例:
型号:
public class ExtendedStudent {
public string FirsName {get; set;}
public virtual Prefix Prefix {get; set;}
}
public class Prefix {
public int Id {get; set;}
public string Name {get; set;}
}
Startup.cs
builder.AddDbContext<ApplicationDbContext>( b => b.UseLazyLoadingProxies()
.UseSqlServer(connectionString));
ApplicationDbContext.cs
public class ApplicationDbContext {
...
public DbSet<Proxy> Proxies {get; set;}
public DbQuery<ExtendedStudent> ExtendedStudents {get; set;}
...
}
答案 0 :(得分:1)
是的,未跟踪它们。这是默认的(也是唯一的)行为。我认为例外是一种比较笨拙的说法。一个非跟踪类型包含一个跟踪实体会很奇怪。另外,请注意,没有用于查询类型的映射API来定义关系,因此显然不支持该映射。
之所以无法做到这一点,主要原因是可以从任何类型的SQL查询查询类型,并且不能保证查询类型后面的查询是可组合的。完全有可能从存储过程中填充查询类型。然后,SQL无法(更不用说EF)将结果与表连接起来以填充导航属性。