Как добавить несколько телефонных номеров через PhoneController?
Вот пример, на который можно сослаться:
[HttpPost]
public async Task<ActionResult<Phone>> PostPhone(List<Phone> phone)
{
foreach(var item in phone)
{
_context.Phone.Add(item);
}
await _context.SaveChangesAsync();
return RedirectToAction("GetPhone");//do your stuff...
}
Почтальон : нет необходимости передавать Id
. Но поскольку ContactId
является внешним ключом, вам нужно передать ContactId
( Примечание : убедитесь, что ContactId exsits). ![enter image description here](https://i.stack.imgur.com/k2DGr.png)
Моя проблема заключается в том, как реализовать все это, но с использованием класса телефона.
1.Интерфейс:
public interface IDataAccessProvider
{
void AddContact(Contact contact);
void UpdateContact(Contact contact);
void DeleteContact(int id);
Contact GetContact(int id);
List<Contact> GetAllContacts();
}
2.Implement:
public class DataAccessProvider : IDataAccessProvider
{
private readonly YourContext _context;
public DataAccessProvider(YourContext context)
{
_context = context;
}
public void AddContact(Contact contact)
{
_context.Contact.Add(contact);
_context.SaveChanges();
}
public void DeleteContact(int id)
{
var contact = _context.Contact.Find(id);
_context.Contact.Remove(contact);
_context.SaveChanges();
}
public List<Contact> GetAllContacts()
{
return _context.Contact.Include(c=>c.Phones).ToList();
}
public Contact GetContact(int id)
{
var contact = _context.Contact.Find(id);
return contact;
}
public void UpdateContact(Contact contact)
{
foreach (var item in contact.Phones)
{
var flag = _context.Phone.Find(item.Id);
//if you want to change the phone's value
if (flag != null)
{
flag.Number = item.Number;
_context.Entry(flag).State = EntityState.Modified;
_context.SaveChanges();
}
//if the phone even does not exsit in Phone class
//you need to create it
else
{
_context.Phone.Add(item);
_context.SaveChanges();
}
}
_context.Entry(contact).State = EntityState.Modified;
try
{
_context.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
throw;
}
}
}
3.Контроллер:
[Produces("application/json")]
[Route("api/Contacts")]
public class ContactsController : Controller
{
private readonly IDataAccessProvider _dataAccessProvider;
public ContactsController(IDataAccessProvider dataAccessProvider)
{
_dataAccessProvider = dataAccessProvider;
}
[HttpGet]
[Route("api/Contacts/Get")]
public IEnumerable<Contact> Get()
{
return _dataAccessProvider.GetAllContacts();
}
[HttpPost]
[Route("api/Contacts/Create")]
public void Create([FromBody]Contact Contact)
{
if (ModelState.IsValid)
{
_dataAccessProvider.AddContact(Contact);
}
}
[HttpPut]
[Route("api/Contacts/Update")]
public void Update([FromBody]Contact Contact)
{
if (ModelState.IsValid)
{
_dataAccessProvider.UpdateContact(Contact);
}
}
[HttpDelete]
[Route("api/Contacts/Delete")]
public void Delete(int id)
{
if (ModelState.IsValid)
{
_dataAccessProvider.DeleteContact(id);
}
}
}
4.Как использовать Почтальон:
Не нужно передавать Id
. Вы можете создать вместе с phone
или просто создать contact
![enter image description here](https://i.stack.imgur.com/9w8cv.png)
Вы можете изменить значение телефона в этом контакте. Вы также можете добавить новый телефон к этому контакту. ![enter image description here](https://i.stack.imgur.com/Vzfbk.png)
![enter image description here](https://i.stack.imgur.com/ERaK3.png)