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; }
}