Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.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
C# 实体框架核心代码首先从多个实体映射到实体_C#_Asp.net Core Mvc_Entity Framework Core_Ef Core 2.0 - Fatal编程技术网

C# 实体框架核心代码首先从多个实体映射到实体

C# 实体框架核心代码首先从多个实体映射到实体,c#,asp.net-core-mvc,entity-framework-core,ef-core-2.0,C#,Asp.net Core Mvc,Entity Framework Core,Ef Core 2.0,首先,我在使用实体框架核心代码构建数据库时遇到了一些问题,我知道这很容易解决,但时间紧迫 我有一个国家实体,如下所示: public class Country { public int CountryId {get; set; } public string Name { get; set; } public IEnumerable<State> States { get; set; } } 我的问题是如何映射到地址实体中的国家和州 public cla

首先,我在使用实体框架核心代码构建数据库时遇到了一些问题,我知道这很容易解决,但时间紧迫

我有一个国家实体,如下所示:

public class Country 
{
    public int CountryId {get; set; }
    public string Name { get; set; }
    public IEnumerable<State> States { get; set; }
}
我的问题是如何映射到地址实体中的国家和州

public class Address 
{
    public int AddressId {get; set; }
    public string HouseNumber { get; set; }
    public string Street { get; set; }
    public int StateId { get; set; }
    public virtual State State { get; set; }
    public int CountryId { get; set; }
    public virtual Country Country { get; set; }
}
由于某些原因,此设置允许我从视图中的选择列表中选择countryId,并保存地址。但是,即使在调试时我看到stateId实际上已传递给控制器操作且ModelState有效,state字段也不会保存

在通过DbContext保存之后,我看到stateId值从未保存过

附加细节 我没有提到我正在使用AutoMapper,因为我认为它与这个问题无关,但现在我意识到这不是真的。我的地址实体实际上是一个配置文件实体的子实体,我试图保存整个配置文件,认为AutoMapper可以处理子实体中的FK,但显然它不能

解决了的 在多次更改方法后,没有任何积极的结果,我决定将Address实体与Profile实体分开保存,现在Address.StateId字段将按原样更新

如果有人知道如何在AutoMapper中正确映射子实体,我将非常感谢这些信息。
谢谢。

请添加您的实体配置,以及尝试在新地址上设置州和国家的示例代码。设置定义了引用的FK字段可能会有问题。此外,国家实体中的州集合应标记为虚拟。显示的实体模型具有循环/冗余:国家->州->地址和国家->地址。从数据库POV中,最好从
Address
表中删除
CountryId
FK。
Country
可以通过
Address.State.Country
@StevePy获得。我还没有通过Model Builder配置这些实体。状态集合实际上是虚拟的,我只是在我的帖子中错过了它。@IvanStoev你是对的,这是我一直得到的错误。我现在已经从地址中删除了国家/地区,但现在我在尝试添加地址时收到StateId的外键约束错误。如果它们不是由模型生成器配置的,并且没有属性,那么EntityTypeConfiguration?我不确定EF Core在实体配置的约定方面走了多远,但当它变得明确时。如果你能概括出你做了什么,而不是你没有做什么,这会有所帮助
public class Address 
{
    public int AddressId {get; set; }
    public string HouseNumber { get; set; }
    public string Street { get; set; }
    public int StateId { get; set; }
    public virtual State State { get; set; }
    public int CountryId { get; set; }
    public virtual Country Country { get; set; }
}