我有一个ASP.NET MVC应用程序,我添加了Web API以便接收Json并将内容插入SQL Server。在移动Cordova应用程序上以及在Rest Api测试中,我的Http状态为200。但是,没有插入任何记录。
这是课程,DBContext
:
public class MobileController : ApiController
{
private PTSContext db = new PTSContext();
//all the code....
}
我创建了此类来处理Http请求中的json正文。
public class DailyCrewActivityJson
{
[JsonProperty("api_id")]
public string api_id { get; set; }
[JsonProperty("api_daily_crew_id")]
public string api_daily_crew_id { get; set; }
[JsonProperty("api_contract_id")]
public string api_contract_id { get; set; }
[JsonProperty("api_contract_task_id")]
public string api_contract_task_id { get; set; }
}
我有此类来处理插入。
[HttpPost]
[Route("api/mobile/insertdailycrewactivity")]
public IHttpActionResult InsertDailyCrewActivity([FromBody] DailyCrewActivityJson crewActivityJson)
{
DailyCrewActivity d = new DailyCrewActivity();
d.id = crewActivityJson.api_id;
d.daily_crew_id = crewActivityJson.api_daily_crew_id;
d.contract_id = crewActivityJson.api_contract_id;
d.contract_task_id = crewActivityJson.api_contract_task_id;
db.DailyCrewActivities.Add(d);
db.SaveChanges();
return Ok();
}
这种模式看起来还好吗?我尝试从高级REST客户端手动执行POST,但仍然看不到插入内容或错误。
这是我的url和json主体的样子:
https://<my url.com>/api/mobile/insertdailycrewactivity
JSON:
{
"api_id": "74849939162039260-1569958529936",
"api_daily_crew_id": "21273665486597612-1569862557128",
"api_contract_id": "eef03be7-82b9-4066-93d9-cb64d346481c",
"api_contract_task_id": "00407436-2450-4f40-9323-29860232e8f7",
}
编辑10/5/2019 我将站点移到本地,然后将SQL数据库恢复到本地SQL Express。当我运行网站并致电
http://localhost/api/mobile/insertdailycrewactivity
我可以逐步介绍该网络api方法。 db.SaveChanges方法中发生了我的错误。
该错误来自System.Collections.ListDictionaryInternal,状态为“ {无效的列名'DailyCrew_id'}” 我没有该名称的专栏。我确实有一个名为“ daily_crew_id”的列,并且有一个名为“ DailyCrew”的表,其中带有“ id”字段。 “ DailyCrew_id”会成为内部列表中的名称吗? 我不知道在哪里看或如何解决这个问题。
答案 0 :(得分:0)
事实证明,EF不喜欢我在表和字段中使用的命名约定,因此它无法在键之间建立关系。我曾将属性分别标注为“键”和“外键”,但是在将属性的命名更改为EF所喜欢的名称之后,一切都正常了。
答案 1 :(得分:-3)
内部发生什么
db.DailyCrewActivities.Add(d);
db.SaveChanges();
我相信您已经在
中实现了数据库插入逻辑SaveChanges()
在您的方法中,总是返回Http状态为200的原因总是返回
返回Ok();
请添加SaveChanges()方法实现