Usuwanie encji w jednym zapytaniu

0

Witam.
Standardowy kod do usuwania encji z bazy użyty w klasie generycznej. Niestety nie działa mi to (kod zakomentowany działa). Próba Attacha zwraca komunikat że istnieje inna encja z tym Id która jest już trakowana. Ktoś może mi to objaśnić?

		public virtual async Task<ServiceResponse> DeleteAsync(int id)
		{
			var serviceResponse = new ServiceResponse();

			try
			{
				var entity = Activator.CreateInstance<TEntity>();
				entity.Id = id;
				_context.Entry(entity).State = EntityState.Deleted;

				//var entity = await _context.Set<TEntity>().FirstOrDefaultAsync(x => x.Id == id);
				//_context.Entry(entity).State = EntityState.Deleted;

				if (await _context.SaveChangesAsync() == 0)
				{
					serviceResponse.SetError($"Error: Entity Id:{id} not found.", 404);
				}
			}
			catch (Exception ex)
			{
				serviceResponse.SetError(ex.Message);
			}

			return serviceResponse;
		}

2

Encja, którą próbujesz usunąć jest już na liście obiektów które śledzi EF. Wystarczy, że sprawdzisz czy obiekt o danym ID, który chcesz usunąć jest lokalnie dostępny.
https://learn.microsoft.com/en-us/ef/core/change-tracking/entity-entries#using-dbsetlocal-to-query-tracked-entities

Zamiast refleksji proponuję dodanie constrainta new() na typ generyczny. var entity = new TEntity() { Id = id };

0
Kokoniłaj napisał(a):

Encja, którą próbujesz usunąć jest już na liście obiektów które śledzi EF. Wystarczy, że sprawdzisz czy obiekt o danym ID, który chcesz usunąć jest lokalnie dostępny.
https://learn.microsoft.com/en-us/ef/core/change-tracking/entity-entries#using-dbsetlocal-to-query-tracked-entities

Zamiast refleksji proponuję dodanie constrainta new() na typ generyczny. var entity = new TEntity() { Id = id };

Dzięki :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1