Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework core 实体框架将子对象设置为null_Entity Framework Core_Asp.net Core 2.0 - Fatal编程技术网

Entity framework core 实体框架将子对象设置为null

Entity framework core 实体框架将子对象设置为null,entity-framework-core,asp.net-core-2.0,Entity Framework Core,Asp.net Core 2.0,我对EF有一个很奇怪的问题。我正在显示一个场景列表,其中每个场景都有一个关联的MfgSite。以下是模型: //Models public partial class Scenario { public string Name { get; set; } public bool IsFinal { get; set; } public Guid Uid { get; set; } public string Username { get; set; }

我对EF有一个很奇怪的问题。我正在显示一个场景列表,其中每个场景都有一个关联的MfgSite。以下是模型:

//Models
public partial class Scenario
{

    public string Name { get; set; }
    public bool IsFinal { get; set; }
    public Guid Uid { get; set; }
    public string Username { get; set; }
    public string Description { get; set; }
    public Guid MfgSiteUid { get; set; }

//navigation property
    public MfgSite MfgSiteU { get; set; }

}


public partial class MfgSite
{
    public string MfgSiteCommonName { get; set; }
    public string MfgSiteState { get; set; }
    public string MfgSiteFunction { get; set; }
    public string MfgSiteDesc { get; set; }
    public Guid Uid { get; set; }

//navigation property
    public Scenario Scenario { get; set; }
}
在我的场景控制器索引操作中,我有以下代码(注意,我首先使用从db生成模型)。返回的列表在所有情况下都将MfgSiteU设置为null,场景中每个唯一的MfgSiteUid只有一个条目除外

//Scenario Controller Index Action
public async Task<IActionResult> Index()
{
        var sContext = _context.Scenario.Include(s => s.MfgSiteU);
        return View(await sContext.ToListAsync());
}
//场景控制器索引操作
公共异步任务索引()
{
var sContext=_context.Scenario.Include(s=>s.MfgSiteU);
返回视图(wait sContext.ToListAsync());
}
在视图中显示时(并非所有列都显示),如下所示:

空列是因为s.MfgSiteU为null,即使s.MfgSiteUid准确且不为null。MfgSiteCommonName第二行应为“测试站点1”,第三行和第四行应为“测试站点2”

什么可能导致此问题?潜在的修复方法是什么?作为调试的一部分,我尝试在DbSet上使用foreach一次导航一个场景,并手动将每个场景添加到列表中。我可以看到,MfgSiteU在单个文件上不是空的,但在我迭代到最后时,它如何将以前的文件重置为空

什么可能导致此问题?潜在的修复方法是什么

问题在于,根据样本数据,
Scenario
MfgSite
之间的关系是多对一的,而生成的关系是一对一的。EF Core在生成加载相关数据所需的SQL联接时使用关系基数,如果关系映射不正确,则可能导致错误的结果

修复方法是替换来自的
MfgSite
中的导航属性

public Scenario Scenario { get; set; }

公共ICollection场景{get;set;}

至于scaffold命令创建错误关系的原因,我无法回答没有数据库模型的问题。如果您可以提供一个复制问题的示例数据库,我建议在EFC issue tracker中打开一个问题。

生成的关系是错误的。它是一对一的,而根据您的数据,它应该是
MfgSite
one-to-many
Scenario
MfgSite
中的导航属性应该类似于
public ICollection Scenarios{get;set;}
@IvanStoev,太棒了!我不知道Scaffold DbContext是如何生成1-1的。FK在场景表上,所以这应该已经生成了一个集合,正如您所指出的。我手动修复了模型,这解决了我的问题。如果您能将此作为答案发布,我很乐意接受。
public ICollection<Scenario> Scenarios { get; set; }