包括未映射的 属性

including a notmapped property

我们有一个 class 尚未映射 属性:

[NotMapped]
public virtual IEnumerable<SM_SITE> SITES { get; set; }

这样做是因为某些查询 (linq) 不需要包括 SITES。但这会在我们需要时引起问题,是否可以将其重新包含在某些查询中?

NotMapped 属性可以应用于我们不想在数据库中创建相应列的实体 class 的属性。因此无法访问未创建的列。

如果您想在必要时到达该列,您应该先删除 NotMapped 属性。

1) 您可以使用显式加载。首先删除 virtual 关键字并到达如下所示的 SITES;

var yourData = context.YourEntity...//how filter you want for the following
context.Entry(yourData).Reference(s => s.STIES).Load();

现在 yourData 也包括 SITES

但是查询数据库2次(可能是性能问题)

2) 您可以使用 Eager Loading。首先删除 virtual 关键字。在预先加载中,除非您不使用 Include 方法,否则您拥有的实体 (SITES) 不会被包含在内。您可以在必要时使用 Include 关键字作为

包含具有预加载的自有实体
context.YourEntity.Include(x=>x.SITES)...//how filter you want for the following

3) 您可以使用 延迟加载。您可以访问 SITES,如下所示;

var yourData = context.YourEntity...//how filter you want for the following
var sitesData = yourData.SITES;

但是它查询了DB 2次(性能问题可能是问题) (已知为 n+1 期)

如果你说我的 NotMapped 属性是必须的;

4) 不要删除 NotMapped 属性。手动添加 SITES table 到数据库。创建一个 SP(存储过程),它使用 SITES 获取实体。当您想在您的实体中包含 SITES 时,您可以调用此 SP。