这有效:
using (var dbContext = new SmartDataContext())
{
dbContext.Configuration.ProxyCreationEnabled = false;
var query = dbContext.EntityMasters.OfType<Person>();
if (includeAddress)
query.Include(p => p.Addresses);
if (includeFiles)
query.Include(p => p.FileMasters);
output.Entity = query.Include(s=>s.Addresses).FirstOrDefault<Person>(e => e.EntityId == id);
}
虽然这不是:
using (var dbContext = new SmartDataContext())
{
dbContext.Configuration.ProxyCreationEnabled = false;
var query = dbContext.EntityMasters.OfType<Person>();
if (includeAddress)
query.Include(p => p.Addresses);
if (includeFiles)
query.Include(p => p.FileMasters);
output.Entity = query.FirstOrDefault<Person>(e => e.EntityId == id);
}
我试图根据来自函数的布尔标志包含地址,文件。但是看起来,EF在使用IF条件时不包括它们。
这与我使用Include实际工作的previous问题有关。
答案 0 :(得分:2)
您需要将Include
的结果分配回query
query = query.Include(p => p.Addresses);
答案 1 :(得分:0)
实体框架&#39;包含&#39;函数仅在连接到查找实体的整个linq查询时才起作用。这是因为linq查询实际上是Expression
的一种形式,可以在执行之前作为一个整体进行检查。
在第二个示例中,Person对象已经与数据库分离,因此EF没有关于Person来自哪个表以及如何将Person与地址表连接以获得所需结果的信息。
如果启用动态代理生成,EF可以跟踪实体与数据库之间的关系。但是,我不确定这是否会使include语句有效。