I created a very simple application to simulate a small register of clients, but when testing the data manipulation by the application I could see in the database that the fields that are null in the register are inserted into the database with two single quotes ( '').
In other applications I can solve this by changing the data type of the parameter to NpgsqlDbType.Text
, but I do not know a way to do this in EF.
I use a POCO Entity class mapped like this:
[Table("cliente", Schema = "public")]
public class Cliente
{
[Key]
[Column("id")]
public int Id { get; set; }
[Required(ErrorMessage = "Nome não pode ser nulo.")]
[Column("nome")]
public string Nome { get; set; }
[Required(AllowEmptyStrings = true)]
[Column("endereco")]
public string Endereco { get; set; }
[Column("bairro", TypeName="text")]
public string Bairro { get; set; }
[Required(ErrorMessage = "Cidade não pode ser nulo.")]
[Column("cidade")]
public int CidadeID { get; set; }
[ForeignKey("CidadeID")]
public Cidade Cidade { get; set; }
[Column("cpfcnpj")]
public string CPFCNPJ { get; set; }
[Column("telefone")]
public string Telefone { get; set; }
[Column("ativo")]
public bool Ativo { get; set; }
public virtual IQueryable<Cliente> Clientes { get; set; }
}
Below method that inserts the customer data entered in the form into the database:
public static void InserirCliente(Cliente cli)
{
using (var db = new Repositorio.DBContexto())
{
try
{
db.Clientes.Add(cli);
var usuarioSalvo = db.SaveChanges();
}
catch (Exception)
{
throw;
}
}
}
Below the event method started by the Click of a Save button:
private void btnSalvar_ItemClick(object sender, ItemClickEventArgs e)
{
try
{
var cliente = new Cliente();
cliente.Nome = Convert.ToString(txtNome.EditValue);
cliente.Telefone = Convert.ToString(txtTelefone.EditValue);
cliente.CPFCNPJ = Convert.ToString(txtCPF.EditValue);
cliente.Endereco = Convert.ToString(txtEndereco.EditValue);
cliente.Bairro = Convert.ToString(txtBairro.EditValue);
cliente.CidadeID = Convert.ToInt32(lkeCidade.EditValue);
cliente.Ativo = true;
DAL.ClienteDAL.InserirCliente(cliente);
MessageBox.Show("Cliente Inserido com Sucesso!", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information);
this.DialogResult = DialogResult.OK;
this.Close();
}
catch (Exception ex)
{
MessageBox.Show(string.Format("{0}\n\n{1}", ex.Message, ex.InnerException), "Ooops", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Is there any way to prevent "single quotes" from being entered in fields that allow null values?