我在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();
}
}