C# 包括notmapped属性

C# 包括notmapped属性,c#,linq,entity-framework-6,C#,Linq,Entity Framework 6,我们有一个具有NotMapping属性的类: [NotMapped] public virtual IEnumerable<SM_SITE> SITES { get; set; } [未映射] 公共虚拟IEnumerable站点{get;set;} 这是因为某些查询(linq)不需要包含站点。但是,当我们需要它时,这会导致一个问题,是否还需要将其包含在某些查询中?NotMapped属性可以应用于我们不希望在数据库中为其创建相应列的实体类的属性。因此,不可能到达未创建的列 如果您想

我们有一个具有NotMapping属性的类:

[NotMapped]
public virtual IEnumerable<SM_SITE> SITES { get; set; }
[未映射]
公共虚拟IEnumerable站点{get;set;}

这是因为某些查询(linq)不需要包含站点。但是,当我们需要它时,这会导致一个问题,是否还需要将其包含在某些查询中?

NotMapped属性可以应用于我们不希望在数据库中为其创建相应列的实体类的属性。因此,不可能到达未创建的列

如果您想在必要时访问该列,应首先删除NotMapped属性。

1)您可以使用显式加载。首先删除virtual关键字并访问网站,如下所示

var yourData = context.YourEntity...//how filter you want for the following
context.Entry(yourData).Reference(s => s.STIES).Load();
var yourData = context.YourEntity...//how filter you want for the following
var sitesData = yourData.SITES;
现在您的数据也包括站点。

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

2)您可以使用即时加载。首先删除虚拟关键字。在即时加载中,除非您不使用Include方法,否则您拥有的实体(站点)将不会被包括在内。如有必要,您可以使用include关键字作为

context.YourEntity.Include(x=>x.SITES)...//how filter you want for the following
3)您可以使用延迟加载。您可以访问如下所示的站点

var yourData = context.YourEntity...//how filter you want for the following
context.Entry(yourData).Reference(s => s.STIES).Load();
var yourData = context.YourEntity...//how filter you want for the following
var sitesData = yourData.SITES;
但它查询数据库2次(性能问题可能是问题) (称为n+1问题)

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


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

您可以删除NotMapped以及不需要SM_站点的函数,您可以使用:db.entity().Exclude(e=>e.Attribute)或db.entity().Ignore(e=>e.Attribute)