Sto seguendo alcuni esempi per imparare il nucleo di asp.net con Entity Framework, sto avendo problemi a salvare i dati di un utente, ho la classe che è stata generata da un database esistente (Database First) e ho creato un ViewModel per lavorare con viste, la mia classe generata dal database è venuto con alcune dipendenze, "ICollection", ho solo bisogno di aggiornare alcuni campi della tabella, quando provo a salvare l'errore si verifica di seguito:
Microsoft.EntityFrameworkCore.DbUpdateException: "Si è verificato un errore durante l'aggiornamento delle voci. Vedi l'eccezione interna per i dettagli. ' SqlException: i dati stringa o binari verrebbero troncati. La dichiarazione è stata chiusa.
Il mio modello:
using System;
using System.Collections.Generic;
namespace PetAlerta.Domain.Entities
{
public partial class Petshop
{
public Petshop()
{
Agendabanhos = new HashSet<Agendabanhos>();
Agendaconsultas = new HashSet<Agendaconsultas>();
Agendavacinas = new HashSet<Agendavacinas>();
Banhos = new HashSet<Banhos>();
Chat = new HashSet<Chat>();
Configshop = new HashSet<Configshop>();
Consultas = new HashSet<Consultas>();
Pets = new HashSet<Pets>();
Shopdonos = new HashSet<Shopdonos>();
}
public int Cod { get; set; }
public string Razaosocial { get; set; }
public string Nomefant { get; set; }
public string Cnpj { get; set; }
public string Endereco { get; set; }
public string Cidade { get; set; }
public string Uf { get; set; }
public string Complemento { get; set; }
public string Bairro { get; set; }
public string Num { get; set; }
public string Cep { get; set; }
public string Endecomp { get; set; }
public string Email { get; set; }
public string Fone1 { get; set; }
public string Fone2 { get; set; }
public string Celular { get; set; }
public string Senha { get; set; }
public string Img { get; set; }
public string Nomeresp { get; set; }
public string Site { get; set; }
public string Seguimento { get; set; }
public DateTime? Dataacesso { get; set; }
public int Ativo { get; set; }
public ICollection<Agendabanhos> Agendabanhos { get; set; }
public ICollection<Agendaconsultas> Agendaconsultas { get; set; }
public ICollection<Agendavacinas> Agendavacinas { get; set; }
public ICollection<Banhos> Banhos { get; set; }
public ICollection<Chat> Chat { get; set; }
public ICollection<Configshop> Configshop { get; set; }
public ICollection<Consultas> Consultas { get; set; }
public ICollection<Pets> Pets { get; set; }
public ICollection<Shopdonos> Shopdonos { get; set; }
}
}
My ViewModel:
using System.ComponentModel.DataAnnotations;
namespace PetAlerta.MVC.ViewModels
{
public class PetShopViewModel
{
[Key]
public int Cod { get; set; }
public string Razaosocial { get; set; }
public string Nomefant { get; set; }
public string Cnpj { get; set; }
public string Endereco { get; set; }
public string Cidade { get; set; }
public string Uf { get; set; }
public string Complemento { get; set; }
public string Bairro { get; set; }
public string Num { get; set; }
public string Cep { get; set; }
public string Endecomp { get; set; }
public string Email { get; set; }
public string Fone1 { get; set; }
public string Fone2 { get; set; }
public string Celular { get; set; }
public string Nomeresp { get; set; }
public string Site { get; set; }
}
}
Sto utilizzando l'automapper per mappare il modello a ViewModel e ViewlModel al modello.
controller:
[HttpPost]
public IActionResult SalvaPerfil([FromBody] PetShopViewModel petshopViewModel)
{
if (ModelState.IsValid)
{
var petshop = Mapper.Map<PetShopViewModel, Petshop>(petshopViewModel);
_PetApp.Update(petshop);
return Content("fim..."); //<<=== ERROR
}
return Content("ERRO");
}
Voglio solo aggiornare i campi che sono nel ViewModel, altri campi come password, immagine URL, ecc ... Voglio aggiornare separatamente in un altro momento, dove sto andando male? come fare questo?
Grazie!
L'errore è molto chiaro. Basta controllare la lunghezza delle colonne e il valore delle proprietà, scoprirete che la lunghezza di uno o più campi NON è sufficiente per contenere i dati che state tentando di inserire. Ad esempio, se un campo è una lunghezza varchar (8) e si tenta di aggiungere 10 caratteri, si otterrà questo errore.