当我尝试使用我的存储库删除实体Produto
时,我遇到了一个奇怪的问题。
通用存储库:
public class RepositoryBase<T> : IDisposable, IRepositoryBase<T> where T : ModelBase
{
/*Other Methods that work perfectly*/
public virtual int Delete(int id)
{
try
{
T entity = _dataContext.Set<T>().Find(id);
_dataContext.Set<T>().Remove(entity);
return _dataContext.SaveChanges();
}
catch(DbEntityValidationException ex)
{
}
}
}
实体:
public class Produto : ModelBase
{
public virtual int? CodigoComercial { get; set; }
[Required]
[MaxLength(150)]
public virtual string Nome { get; set; }
[MaxLength(400)]
public virtual string Ingredientes { get; set; }
[Required]
public virtual CategoriaProduto Categoria { get; set; }
public Produto()
{
Categoria = new CategoriaProduto();
}
}
public class CategoriaProduto : ModelBase
{
[Required]
[MaxLength(150)]
public virtual string Nome { get; set; }
[MaxLength(400)]
public virtual string Descricao { get; set; }
public virtual CategoriaProduto CategoriaPai { get; set; }
public virtual IList<OpcaoIngrediente> Opcoes { get; set; }
public virtual CorCategoriaProdutoEnum Cor { get; set; }
public virtual bool Simples { get; set; }
[MaxLength(400)]
public string Imagem { get; set; }
public CategoriaProduto()
{
Opcoes = new List<OpcaoIngrediente>();
}
}
我找到了捕获异常的方法,这没有任何意义,我尝试删除 Product
,但它声称CategoriaProduto
的名称为空,这是必需的。如下:
SaborFit.Data.Model.CategoriaProduto验证失败
- Nome:Nome是必需的。
我无法弄清楚这个问题。如果我尝试删除CategoriaProduto
,一切顺利。
答案 0 :(得分:4)
我不知道你为什么在大多数字段中使用Virtual
属性,这导致延迟加载,显然你会遇到验证错误< strong>任何操作,您调用整个实体,如.Find()
操作数。你必须首先决定你想做什么!我不喜欢的另一个解决方案是禁用保存更改验证:
context.Configuration.ValidateOnSaveEnabled = false;
context.SaveChanges();