为什么我的ICollection为空?

时间:2017-11-12 23:07:33

标签: c# entity-framework

我在两个实体之间建立了一对一的关系。

每当我添加一条新记录及其各自的关系时,它就不会被映射到该集合的另一个实体。

这是我的班级类型:

public class Typology
{     
    // Rest of fields removed...
    public virtual ICollection<Project> Projects { get; set; }
}

这是我的另一课(项目):

public class Project
{
    // Rest of fields removed...
    public Typology Typology { get; set; }
}

我通过这种方式建立了这种关系:

// This is my EntityTypeConfiguration for Project.
.HasRequired<Typology>(p => p.Typology)
.WithMany(t => t.Projects);

每次我需要创建一个项目时,我都会这样做:

Typology typology = dbContext.Typologies.Where(t => t.Id == projectDTO.TypologyId).First();
projectContext.Typology = typology;

然后我添加并保存更改,如:

dbContext.Projects.Add(projectContext);
dbContext.SaveChanges();

现在,因为这是一对多的关系,我在我的Project对象中添加了一个类型学,从逻辑上讲,项目应该在幕后添加&#34;&#34;自动收集该类型学。

嗯,事实并非如此。

在调试时,我试图得到这样的类型:

Typology typology = dbContext.Typologies.Where(t => t.Id == id).First();

结果是我获得了该类型的所有字段,例如Id,Description等,但项目集合为空。

3 个答案:

答案 0 :(得分:0)

您需要向Project Projects对象的typology集合添加新的Typology typology = dbContext.Typologies.Where(t => t.Id == projectDTO.TypologyId).First(); //projectContext.Typology = typology; //dbContext.Projects.Add(projectContext); typology.Projects.Add(new Project() {...}); dbContext.SaveChanges(); 。这样的事情。

{{1}}

答案 1 :(得分:0)

问题已解决:

我只需要将此行更改为我的db context的构造函数:

Configuration.ProxyCreationEnabled = true;

因为它之前被标记为false

答案 2 :(得分:0)

我的问题是,当我查询模型时,我忘记添加 .Include(d => d.Projects)

当然我不是原始海报,所以我将Projects替换为我感兴趣的收藏。

var projects = await _dbContext.Typologies.Where(t => t.Id == projectDTO.TypologyId).Include('p => p.Projects').First()
相关问题