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

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

Сообщение Anonymous »

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

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

ContactController:
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:
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();
}
}
класс модели:

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

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();
}
}
класс модели:

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

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!
}
}
класс модели:

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

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#»