DbInitializer种子上的EntityValidationErrors

时间:2016-01-17 13:15:38

标签: c# .net asp.net-mvc entity-framework

我在pessoa类中具有虚拟用于延迟加载的endereco属性,但是当我尝试addOrUpdate一个pessoa对象时,我得到一个EntityValidation错误,说明了endereco对象字段是必需的。但是我在添加pessoa对象之前实例化了exereco对象并设置了所有的endereco字段和addOrUpdate。 为什么会发生这种情况以及如何解决? 提前谢谢。

protected override void Seed(MyDbCtx context){
base.Seed(context);            

    Endereco endereco = new Endereco
    {
        bairro = "JK3",
        cep = 35045606,
        complemento = "Prédio",
        logradouro = "Doze",
        municipio = munic,
        numero = "342",
        tipo = "rua"
    };

    context.endereco.AddOrUpdate(p => p.logradouro, endereco);
    context.SaveChanges();

    Pessoa pes = new Pessoa
    {
        nome = "Nome Pessoa",
        apelido_fantasia = "Apelido",
        tipo = TipoPessoa.Fisica,
        endereco = endereco,
        cpf_cnpj = "00011122232",
        rg_insc = "11222333",
        dt_emissao_rg = DateTime.Now.Date,
        uf_rg = "MG",
        sexo = TipoSexo.Masculino,
        dt_nasc = DateTime.Now.Date,
        dt_cad = DateTime.Now.Date
    };


    context.pessoa.AddOrUpdate(p => p.codigo, pes);            

    try
    {
        context.SaveChanges(); // Error happens here
    }
    catch (DbEntityValidationException e)
    {
        foreach (var eve in e.EntityValidationErrors)
        {
            string a = String.Format("Entity of type {0} in state {1} has the following validation errors:",
            eve.Entry.Entity.GetType().Name, eve.Entry.State);
            Console.WriteLine(a);
            var b = "";
            foreach (var ve in eve.ValidationErrors)
            {
                b = String.Format("- Property: {0}, Error: {1}",
                ve.PropertyName, ve.ErrorMessage);
                Console.WriteLine(b);                        
            }
        }
        throw;
    }               
}

模型

 public class Endereco
{
    [Key]
    public int codigo { get; set; }

    [Required]
    [MaxLength(200)]
    [Display(Name = "Logradouro")]
    public string logradouro { get; set; }

    [Required]
    [MaxLength(100)]
    [Display(Name = "Bairro")]
    public string bairro { get; set; }

    [Required]
    [Display(Name = "Tipo")]
    public virtual TipoLogradouro tipo { get; set; }

    [Required]
    [Display(Name = "CEP")]
    public int cep { get; set; }

    [Required]
    [Display(Name = "Município")]
    public virtual Municipios municipio { get; set; }

    [Required]
    [MaxLength(20)]
    [Display(Name = "Número")]
    public string numero { get; set; }

    [MaxLength(50)]
    [Display(Name = "Complemento")]
    public string complemento { get; set; }

    public Endereco()
    {
        tipo = new TipoLogradouro();
        municipio = new Municipios();
    }        

}


public class Pessoa
{
    [Key]
    public int codigo { get; set; }

    //... Other Fields

    [Required]
    [Display(Name = "Endereço")]        
    public virtual Endereco endereco { get; set; }

   //... Other Fields

    public Pessoa()
    {
        endereco = new Endereco();
    }
}

0 个答案:

没有答案