Asp.net mvc 删除实体会导致验证错误EF6
当我试图使用我的存储库删除实体Asp.net mvc 删除实体会导致验证错误EF6,asp.net-mvc,entity-framework,repository,entity-framework-6,Asp.net Mvc,Entity Framework,Repository,Entity Framework 6,当我试图使用我的存储库删除实体Produto时,我遇到了一个奇怪的问题 通用存储库: public class RepositoryBase<T> : IDisposable, IRepositoryBase<T> where T : ModelBase { /*Other Methods that work perfectly*/ public virtual int Delete(int id) { try {
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>();
}
}
公共类RepositoryBase:IDisposable,IRepositoryBase其中T:ModelBase
{
/*其他工作完美的方法*/
公共虚拟整数删除(整数id)
{
尝试
{
T entity=_dataContext.Set().Find(id);
_dataContext.Set().Remove(实体);
返回_dataContext.SaveChanges();
}
捕获(DbEntityValidationException ex)
{
}
}
}
实体:
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>();
}
}
公共类Produto:ModelBase
{
公共虚拟int?codigommercial{get;set;}
[必需]
[MaxLength(150)]
公共虚拟字符串Nome{get;set;}
[MaxLength(400)]
公共虚拟字符串Ingredientes{get;set;}
[必需]
公共虚拟分类Produto分类{get;set;}
公共产品()
{
Categoria=新的CategoriaProduto();
}
}
公共类CategoriaProduto:ModelBase
{
[必需]
[MaxLength(150)]
公共虚拟字符串Nome{get;set;}
[MaxLength(400)]
公共虚拟字符串描述符{get;set;}
公共虚拟类别Produto CategoriaPai{get;set;}
公共虚拟IList操作空间{get;set;}
公共虚拟corcategoriaprodutenum Cor{get;set;}
公共虚拟布尔简化{get;set;}
[MaxLength(400)]
公共字符串Imagem{get;set;}
公共分类aproduto()
{
Opcoes=新列表();
}
}
我找到了捕获异常的方法,这毫无意义,我尝试删除产品
,但它声称CategoriaProduto
的名称为空,是必需的。详情如下:
SaborFit.Data.Model.CategoriaProduto验证失败
- Nome:需要字段Nome
我搞不懂这个问题。如果我尝试删除
CategoriaProduto
,一切都会顺利。我不知道为什么对大多数字段使用Virtual
属性,这会导致延迟加载,显然,在调用整个实体(如.Find()
操作数)的任何操作上都会遇到验证错误。你必须先决定你想做什么!我不喜欢的另一个解决方案是禁用保存更改的验证:
context.Configuration.ValidateOnSaveEnabled = false;
context.SaveChanges();
我不知道为什么对大多数字段使用
Virtual
属性,这会导致延迟加载,显然,在调用整个实体(如.Find()
操作数)的任何操作上都会遇到验证错误。你必须先决定你想做什么!我不喜欢的另一个解决方案是禁用保存更改的验证:
context.Configuration.ValidateOnSaveEnabled = false;
context.SaveChanges();