Адреса электронной почты и номера телефонов не добавляются в базу данных при создании нового контакта.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Адреса электронной почты и номера телефонов не добавляются в базу данных при создании нового контакта.

Сообщение Anonymous »

Итак, я работаю над веб-приложением телефонной книги, используя ASP.NET Core и EF Core для серверной части.
У меня есть 3 модели: контакт, электронная почта и телефон с отношениями «один ко многим».
Каждая из них контакт может иметь несколько адресов электронной почты и номеров телефонов.
Когда я попытался добавить новый контакт через пользовательский интерфейс Swagger, я заметил, что он не сохраняет адреса электронной почты и номера телефонов, а только контактные данные. Я также попытался вручную добавить адрес электронной почты и номер телефона, и, попробовав это в пользовательском интерфейсе Swagger, я получил контактные данные, но снова с пустыми массивами адресов электронной почты и номеров телефонов...
Я опубликую мой код здесь, и, надеюсь, кто-нибудь увидит, где я напутал.
Заранее всем спасибо.
ContactController.cs

Код: Выделить всё

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using incubis_assignment.Data;
using incubis_assignment.Models;
using System.Linq.Expressions;
using System.Diagnostics.Eventing.Reader;

namespace incubis_assignment.Controllers
{
[Route("api/[controller]")]
public class ContactController : ControllerBase
{
private readonly AppDbContext _context;

public ContactController(AppDbContext context)
{
_context = context;
}

[HttpGet]
public async Task GetContacts()
{
return await _context.Contacts.ToListAsync();
}

[HttpGet("{id}")]
public async Task GetOneContact(int id)
{
var contact = await _context.Contacts.FindAsync(id);
if (contact == null) return NotFound();
return contact;
}

[HttpPost]
public async Task PostContact(Contact contact)
{
contact.Id = 0;
_context.Contacts.Add(contact);
await _context.SaveChangesAsync();
var resourceUrl = Url.Action(nameof(GetContacts), new { id = contact.Id });
return Created(resourceUrl, contact);
}

[HttpPut("{id}")]
public async Task PutContact(int id, [FromBody] Contact contact)
{
if (id != contact.Id) return BadRequest();
_context.Entry(contact).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!ContactExists(id)) return NotFound();
else throw;
}
return NoContent();
}

[HttpDelete("{id}")]
public async Task DeleteContact(int id)
{
var contact = await _context.Contacts.FindAsync(id);
if (contact == null) return NotFound();
_context.Contacts.Remove(contact);
await _context.SaveChangesAsync();
return NoContent();
}

private bool ContactExists(int id)
{
return _context.Contacts.Any(e => e.Id == id);
}

}
}
AppDbContext.cs

Код: Выделить всё

using Microsoft.EntityFrameworkCore;
using incubis_assignment.Models;
using System.Reflection.Metadata;

namespace incubis_assignment.Data;

public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions options) : base(options) { }
public DbSet Contacts { get; set; }
public DbSet Emails { get; set; }
public DbSet
 Phones { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity()
.HasMany(c => c.Emails)
.WithOne(e => e.Contact)
.HasForeignKey(e => e.ContactId)
.IsRequired();

modelBuilder.Entity()
.HasMany(c => c.Phones)
.WithOne(p => p.Contact)
.HasForeignKey(p => p.ContactId)
.IsRequired();
}
}
Contact.cs

Код: Выделить всё

namespace incubis_assignment.Models
{
public class Contact
{
public int Id { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public string Address { get; set; }
public ICollection Emails { get; set; } = new List();
public ICollection
 Phones { get; set;  } = new List();

}
}
Email.cs

Код: Выделить всё

namespace incubis_assignment.Models
{
public class Email
{
public int Id { get; set; }
public int ContactId { get; set; }
public string EmailAddress { get; set; }
public string Category {  get; set; }
public Contact Contact { get; set; } // Navigacijsko svojstvo, nema potrebe za null!
}
}

Phone.cs

Код: Выделить всё

namespace incubis_assignment.Models
{
public class Phone
{
public int Id { get; set; }
public int ContactId { get; set; }
public string PhoneNumber { get; set; }
public string Category { get; set; }
public Contact Contact { get; set; } // Navigacijsko svojstvo, nema potrebe za null!
}
}
Я следовал документации, но они не особо помогли, равно как и ChatGPT, а только усугубил ситуацию...

Подробнее здесь: https://stackoverflow.com/questions/790 ... ew-contact
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»