Reputation: 347
I need to edit data(body) of HTTP POST request before storing it to DB.
I am beginner and trying to save data into database but before saving I need to fetch data using value of one variable in received request
Extra Information : This may help
This is http post body
{
"message": "K E ?",
"senderId": "c24617c6-4680-4a8b-a010-cdf969ddd3f8",
"dateTime": "2018-09-01T20:06:06",
"request": "9cb31157-86b4-4eeb-b770-fc3a86f5f906"
}
here request is object and this "9cb311......f5f906" is request id what I want to do is to fetch object of request using this request id so I can store the data into DB
Something Like this
[HttpPost]
public async Task<IActionResult> PostConversation([FromBody] Conversation conversation)
{
Request str = conversation.Request;
var request = (from r in _context.Requests
where r == str
select r);
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
_context.Conversation.Add(conversation);
await _context.SaveChangesAsync();
return CreatedAtAction("GetConversation", new { id = conversation.ConversationUniqueId }, conversation);
}
DB Model
public class Conversation
{
public Request Request { get; set; }
}
public class Request
{
public string RequestId { get; set; }
}
Sorry if I am not clear
Upvotes: 0
Views: 210
Reputation: 3727
It seems that you want to bind multiple conversations to one request and save them in the database.
Edit your model like this:
public class Conversation
{
public int ConversationId { get; set; }
public string RequestId { get; set; }
[ForeignKey(nameof(RequestId))]
public Request Request { get; set; }
}
public class Request
{
public string RequestId { get; set; }
[InverseProperty(nameof(Conversation.Request))]
public IEnumerable<Conversation> Conversations{ get; set; }
}
That will make EF understand what you wanna to do.
And modify your code in your action like:
[HttpPost]
public async Task<IActionResult> PostConversation([FromBody] Conversation conversation)
{
string requestId = conversation.RequestId;
var request = (from r in _context.Requests
where r.RequestId == requestId
select r);
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
// Reject if given requestid can not find a request.
if (request == null)
{
return NotFound();
}
_context.Conversation.Add(conversation);
await _context.SaveChangesAsync();
return CreatedAtAction("GetConversation", new { id = conversation.ConversationUniqueId }, conversation);
}
This will save the conversation in your database and also link it to that request.
Upvotes: 0
Reputation: 29996
To save Request
to Conversation
by requestId, there is no need to do like this, you could define navigation property.
public class Conversation
{
public string RequestId { get; set; }
public virtual Request Request { get; set; }
}
public class Request
{
public string Id { get; set; }
}
Then, you could save your current request directly with RequestId
without retriving Request
object from database.
Upvotes: 1