abo*_*nov 0 c# entity-framework-core asp.net-core-mvc asp.net-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; }
}
Run Code Online (Sandbox Code Playgroud)
当我尝试保存它(将字段的值organization
指向数据库中的现有记录)时,ModelState 无效(“组织”:输入无效)。
我将 的id
与Organization
其余的有效负载一起发送:
{
"Name": "Port 1",
"Organization": 16
}
Run Code Online (Sandbox Code Playgroud)
控制器代码非常简单:
[HttpPost]
public IActionResult Create([FromBody]Portfolio item){
if (ModelState.IsValid){
_PortfolioRepo.Add(item);
_PortfolioRepo.Commit();
return new OkObjectResult(item);
}
else{
return BadRequest(ModelState);
}
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,当我Organization
在有效负载中指定字段时,item
方法中的字段Create()
将出现null
,因此我无法Organization
从其存储库中手动检索并链接到Portfolio
其中任何一个字段。当我省略 时Organization
,它会很好地保存实体。
如果我将有效负载的详细信息包含Organization
在内部,那么 EF 将在数据库中保存新的组织记录。但是,如何链接到现有模型而不是保存新模型呢?
在你的Portfolio
模型中你有这个属性:
public Org Organization { get; set; }
Run Code Online (Sandbox Code Playgroud)
请注意,该房产的类型是Org
。因此,由于显而易见的原因,将其设置为数字将不起作用。尝试将您的模型稍微更改为如下所示:
public int OrganizationId { get; set; }
[ForeignKey("OrganizationId")]
public Org Organization { get; set; }
Run Code Online (Sandbox Code Playgroud)
这将告诉 EF 该Organization
属性是导航属性,其外键是OrganizationId
。设置OrganizationId
属性,它应该可以工作。
归档时间: |
|
查看次数: |
2513 次 |
最近记录: |