gpt4 book ai didi

c# - 为什么包含在 EF6 中被忽略

转载 作者:行者123 更新时间:2023-11-30 12:24:32 25 4
gpt4 key购买 nike

我有 2 个实体。

第一个实体:

 public WorkItem()
{
this.Usage = new Collection<ItemUsage>();
}

public int Id { get; set; }

public string Description { get; set; }

public virtual ICollection<ItemUsage> Usage { get; set; }

和第二个实体:

  public class ItemUsage
{
public ItemUsage()
{
}

public int Id { get; set; }

public int WorkItemId { get; set; }

public string UsedFor { get; set; }

public virtual WorkItem WorkItem { get; set; }
}

但是当我尝试获取所有工作项时,使用列表是空的。即使我添加了 include。

 var all = EntitySet.Include(i => i.Usage).ToList();

延迟加载被禁用。你知道哪里出了问题吗?

如果我检查 dbset 中的查询,则没有与第二个表的连接。

{SELECT 
[Extent1].[Id] AS [Id],
[Extent1].[Description] AS [Description]
FROM [dbo].[WorkItem] AS [Extent1]
}

编辑:
配置:

    entity.HasKey(f => f.Id);
entity.Property(f => f.UsedFor).IsRequired().HasMaxLength(1000);

entity.HasRequired(f => f.WorkItem).WithMany(s => s.Usage).HasForeignKey(s => s.WorkItemId).WillCascadeOnDelete();

    entity.HasKey(f => f.Id);
entity.Property(f => f.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
entity.Property(f => f.Description).IsRequired().HasMaxLength(1000);

entity.HasMany(s => s.Usage).WithRequired(s => s.WorkItem).HasForeignKey(s => s.WorkItemId).WillCascadeOnDelete();

最佳答案

  1. 您在调试时没有通过指向 DbSet 来检查查询。要检查哪个查询实际发送到数据库,您必须使用 Database.Log 属性 - Context Log property

我很确定您的查询是正确的并且与第二个表有连接。

  1. 您将使用此行删除构造函数中的结果:

        this.Usage = new Collection<ItemUsage>();

    EF 生成一个继承自您的实体的代理,覆盖导航属性并为其设置自己的集合。您的构造函数在代理之后被调用,因为您的实体类是代理的基类。只需删除您的构造函数,它就会起作用。

我更喜欢在我的实体中使用这种导航属性初始化方式:

class WorkItem
{
private ICollection<ItemUsage> _usage;

public virtual ICollection<ItemUsage> Usage
{
get { return _usage ?? (_usage = new Collection<ItemUsage>()); }
}
}

关于c# - 为什么包含在 EF6 中被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33869272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com