【发布时间】:2019-09-23 21:50:53
【问题描述】:
我需要更新/保存数据到数据库,但遇到了一个问题: 在 Postman 中进行测试时,我检查了这个 JSON:
{
"contactId": "1",
"contactName": "t4jnesfdv",
"company": {
"companyName":"a546fghf"
}
}
它更新/保存表联系人中的选定记录,但也将新记录添加到其他表公司。
在 Postman 中进行测试时,我检查了这个 JSON:
{
"contactId": "1",
"contactName": "t4jnesfdv",
"company": {
"companyId":"2",
"companyName":"a546fghf"
}
}
获取 500 内部服务器错误。
界面
public interface IContactService
{
Task<bool> SaveContact(ContactModel contact);
}
服务
public async Task<bool> SaveContact(ContactModel contactModel)
{
using (ContactDBContext db = new ContactDBContext())
{
Contacts contact = db.Contacts.Where
(x => x.ContactId == contactModel.ContactId).FirstOrDefault();
if (contact == null)
{
contact = new Contacts()
{
ContactName = contactModel.ContactName,
Company = contactModel.Company
};
db.Contacts.Add(contact);
}
else
{
contact.ContactName = contactModel.ContactName;
contact.Company = contactModel.Company;
}
return await db.SaveChangesAsync() >= 1;
}
}
控制器
[Route("api/[controller]")]
public class ContactController : Controller
{
[HttpPost]
[Route("SaveContact")]
public async Task<IActionResult> SaveContact([FromBody] ContactModel model)
{
return Ok(await _contactService.SaveContact(model));
}
}
型号
public class CompanyModel
{
public int CompanyId { get; set; }
public string CompanyName { get; set; }
public ICollection<Contacts> Contacts { get; set; }
}
public class ContactModel
{
public int ContactId { get; set; }
public string ContactName { get; set; }
public Company Company { get; set; }
}
实体
public class Company
{
public int CompanyId { get; set; }
[StringLength(150)]
public string CompanyName { get; set; }
public ICollection<Contacts> Contacts { get; set; }
}
public class Contacts
{
[Key]
public int ContactId { get; set; }
public string ContactName { get; set; }
public Company Company { get; set; }
}
我希望保存/更新表中的记录与表公司中的现有公司联系,而不向表公司添加新记录
【问题讨论】:
-
你能发布你的
ContactModel课程吗? -
如果你在错误发生的应用程序中放置一个断点,终点真的会被命中吗?您的模型似乎与 JSON 匹配得很好
-
@Michael 我得到了这个 SqlException:当 IDENTITY_INSERT 设置为 OFF 时,无法在表“公司”中插入标识列的显式值。
-
您在发送请求时收到 500 错误?您是否在 Startup.cs 中注册了
IContactService? -
是否存在 ID 为 2 的公司?问题出在这里 Entity Framework 正在尝试添加公司记录,但使用 IDENTITY_INSERT 您无法传递 ID,因为这些值在数据库中自动递增
标签: c# json asp.net-core asp.net-core-webapi