C# 如何阻止实体框架包含我不希望包含的属性?

C# 如何阻止实体框架包含我不希望包含的属性?,c#,entity-framework-core-2.2,C#,Entity Framework Core 2.2,当从我的DataContext读取实体类型时,当我不需要它们时,我会得到所有关联的对象。如何设置EF以便只执行显式加载 从以下位置阅读msdn信息: 似乎我不应该免费获得任何东西,所以显式加载是一种方式,但是我使用下面的代码,但是我的结果超出了我的预期 public class TalesContext : DbContext { public TalesContext() { } public TalesContext(DbContextOptions<

当从我的DataContext读取实体类型时,当我不需要它们时,我会得到所有关联的对象。如何设置EF以便只执行显式加载

从以下位置阅读msdn信息:

似乎我不应该免费获得任何东西,所以显式加载是一种方式,但是我使用下面的代码,但是我的结果超出了我的预期

public class TalesContext : DbContext
{
    public TalesContext()
    {
    }

    public TalesContext(DbContextOptions<TalesContext> options) : base(options)
    {
    }

    protected internal DbSet<Story> Stories { get; set; }
    protected internal DbSet<Event> Events { get; set; }
    protected internal DbSet<StoryEventMention> EventMentions { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (optionsBuilder.IsConfigured) return;

        optionsBuilder.UseInMemoryDatabase("TalesTesting");
    }
}

public class Event
{
    [Required]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public IList<StoryEventMention> EventMentions { get; set; }
    [MaxLength(128)]
    public string Title { get; set; }
}


var query = from e in TalesContext.Events select e;
// various query.Where
query = query.Skip((pageNumber - 1) * pageSize).Take(pageSize);
return query.ToList();
我希望得到一个事件列表,其中ID和标题已填充,EventReferences为空。但是,我会将事件提及与所有其他导航属性一起填充。几乎是整个测试数据库


当我运行一个单元测试并通过API公开它时,我得到了这个信息。

来回答您的问题。我相信你需要做的是 在你的TalesContext中,你可以这样称呼:

this.Configuration.LazyLoadingEnabled = false;
资料来源: 解释延迟加载:

解释了即时加载和延迟加载之间的区别
请注意,我不能发表评论,也不想以此作为答案

你需要举个例子。它不是静态属性,而是实例属性。

我发现了错误

我的EventFetcher类是通过IoC注册的单例。它引用了TaleContext,也通过IoC注册为singleton。因此,我在应用程序中使用了一个DataContext。因此,当第一个请求传入时,它就在数据库中植入种子,因此所有内容都在其中。因此,对象之间的所有引用都已构建,当我请求一个引用时,没有显式地包含它,上下文将返回它已经拥有的数据以及附加的所有内容

我对此进行了重组,以便在每个请求中向控制器注入一个新的上下文,并且行为正是您所期望的。因此,这里的教训是,如果在查询时开始获得意外结果,请注意数据上下文的年龄和持久性


谢谢你的帮助

不要使用IList。您不应该在公共API中公开IList。您可以在此处阅读更多:。关于你的问题。尝试将EventAttentions声明为公共虚拟ICollection,然后重试。API控制器返回列表,并具有IActionResult返回类型。但是这个链接很有用也很有趣,谢谢。我也尝试了你的建议,但不幸的是,这对回报没有任何影响。不过,我将在周五再试一次,并进行更多探索。非常感谢,但这是实体框架,而不是实体框架核心。我在TaleContext上没有配置属性。