当我尝试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
,则一切顺利。
我不知道您为什么要Virtual
对大多数字段使用属性,这会导致延迟加载,并且显然您会在“任何操作”中遇到验证错误,在该操作中您会像.Find()
操作数一样调用整个实体。您必须首先决定您想做什么!我不希望您使用的另一种解决方案是在保存更改时禁用验证:
context.Configuration.ValidateOnSaveEnabled = false;
context.SaveChanges();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句