我有一个与另一个相关的模型:
public class Portfolio : BaseEntity, IEntityBase
{
public string Name { get; set; }
public Org Organization { get; set; }
public bool IsPrivate { get; set; }
}
当我尝试保存它(将organization
字段的值指向数据库中的现有记录时),ModelState无效(“组织”:输入无效)。
我发送id
的{{1}}与剩余的有效负载:
Organization
并且Controller代码非常简单:
{
"Name": "Port 1",
"Organization": 16
}
有趣的是,当我在有效负载中指定[HttpPost]
public IActionResult Create([FromBody]Portfolio item){
if (ModelState.IsValid){
_PortfolioRepo.Add(item);
_PortfolioRepo.Commit();
return new OkObjectResult(item);
}
else{
return BadRequest(ModelState);
}
}
字段时,Organization
方法中的item
将变为Create()
,因此我无法手动从其repo中检索null
并链接到Organization
。当我省略Portfolio
时,它会保存实体。
如果我在有效负载内附上Organization
的详细信息,那么EF将在数据库中保存新组织记录。但是如何链接到现有版本而不是保存新模型呢?
答案 0 :(得分:3)
在Portfolio
模型中,您拥有此属性:
public Org Organization { get; set; }
请注意,酒店的类型为Org
。因此,将其设置为数字将不会显而易见。尝试将模型稍微改为:
public int OrganizationId { get; set; }
[ForeignKey("OrganizationId")]
public Org Organization { get; set; }
这将告诉EF Organization
属性是导航属性,其外键是OrganizationId
。设置OrganizationId
属性,它应该有效。