Невозможно удалить объект, поскольку он не был найден в ObjectStateManager. С Entity Framwork и хранимой процедурой
У меня есть проблема, чтобы сделать действие удаления, ну, я на самом деле не устраняю, я просто меняю статус.
Я использую хранимую процедуру для удаления или изменения статуса
ALTER PROCEDURE [dbo].[Delete_Empresa]
@CveEmpresaPK int = NULL,
@Estatus bit = NULL
AS
BEGIN
SET NOCOUNT ON;
if @Estatus = 0
begin
update CatEmpresas
set Estatus = 'False'
where CveEmpresaPK = @CveEmpresaPK
end
else
begin
update CatEmpresas
set Estatus = 'True'
where CveEmpresaPK = @CveEmpresaPK
end
END
Я добавляю свой SP к моей таблице в "хранимой процедуре назначения"
введите описание изображения здесь
и моя хранимая процедура отображается в моей таблице Entity Framework
Метод в C# is (Класс BaseRepository.cs):
public void Detele(TEntity entity)
{
try
{
using (_context)
{
_context.Set<TEntity>().Remove(entity);
_context.SaveChanges();
}
}
catch (DbEntityValidationException e)
{
foreach (var eve in e.EntityValidationErrors)
{
Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
eve.Entry.Entity.GetType().Name, eve.Entry.State);
foreach (var ve in eve.ValidationErrors)
{
Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
ve.PropertyName, ve.ErrorMessage);
}
}
throw;
}
}
Я использовал только две данные
Мой репозиторий при вызове BaseRepository.cs:
public class CatEmpresas_Repositorio : Base.BaseRepository<CatEmpresa>, Interfaces.ICatEmpresas
{
private DBControlCalidadEntities _context = null;
/// <summary>
/// Iniciamos una instancia con una clase generica para Create, Update y Detele
/// </summary>
public CatEmpresas_Repositorio()
: base(new DBControlCalidadEntities())
{
}
и моя сущность:
namespace SistemaControl_Entidades {
public partial class CatEmpresa
{
public CatEmpresa()
{
this.CatPersonals = new HashSet<CatPersonal>();
this.Cve1NivelDepto = new HashSet<Cve1NivelDepto>();
}
---->public int CveEmpresaPK { get; set; }
public string NombreEmpresa { get; set; }
public string RazonSocial { get; set; }
public string RFC { get; set; }
public string TipoEmpresa { get; set; }
public string Direccion { get; set; }
public string Colonia { get; set; }
public string CodigoPostal { get; set; }
public Nullable<int> CveEstadoFK { get; set; }
public Nullable<int> CveMpioFK { get; set; }
----->public Nullable<bool> Estatus { get; set; }......
Помогите мне, пожалуйста, что происходит?
1 ответ
Вы можете достичь того, чего хотите, а также избежать необходимости извлекать все сущности, прежде чем помечать их как "исключение", вызывая SP прямо из вашего контекста:
using (_context)
{
string stpSQL = @"EXEC [dbo].[Delete_Empresa] @CveEmpresaPK, @Estatus";
context.Database.ExecuteSqlCommand(TransactionalBehavior.EnsureTransaction, stpSQL,
new SqlParameter("@CveEmpresaPK", entity.CveEmpresaPK),
new SqlParameter("@Estatus", entity.Estatus));
}