Невозможно удалить объект, поскольку он не был найден в 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));
}
Другие вопросы по тегам