EntityFrameworkCore:如何将具有ForeignKey的实体保存到另一个模型?

时间:2017-06-10 05:42:55

标签: c# asp.net-core asp.net-core-mvc entity-framework-core asp.net-core-webapi

我有一个与另一个相关的模型:

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将在数据库中保存组织记录。但是如何链接到现有版本而不是保存新模型呢?

1 个答案:

答案 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属性,它应该有效。

相关问题