Proszę mi powiedzieć, czy jest to przyzwoite podejście do usuwania podmiotu bez pobierania go, ponieważ mam identyfikator.Kod struktury obiektu Najpierw usuwanie za pomocą identyfikatora bez pobierania (styl ogólny)
Mam sklep rodzajowe z następującym Interface (ja tylko pokazać Kasuj):
public interface IStore : IReadOnlyStore
{
void Delete<TEntity>(TEntity entity) where TEntity : class, IEntity, new();
void SaveChanges();
}
I w konkretnej klasie zapas tego interfejsu, oto moja kasowania metoda:
public void Delete<TEntity>(TEntity entity) where TEntity : class, IEntity, new()
{
var obj = Ctx.Entry(entity);
if (obj.State == System.Data.EntityState.Detached)
{
Ctx.Set(typeof(TEntity)).Attach(obj.Entity);
}
Ctx.Set(typeof(TEntity)).Remove(obj.Entity);
}
i testowano zarówno newing się jednostki:
Store.Delete(new Foo() { Id = request.Entity.Id });
jak i pobierania, a następnie podmiotowi Calli ng usuń.
Poprzez debugowanie, mam pożądany wpływ na oba scenariusze.
Chcę tylko upewnić się, że jest to dobry projekt i że nie ma żadnych skutków ubocznych w tym podejściu.
Dla porównania, Ctx to sam DbContext.
Dzięki.
Dzięki za opinie zwrotne. Próbowałem twojej sugestii, ale zabiło to ponad 50% moich testów jednostkowych. Typowy błąd wydaje się następujący: Wystąpił błąd podczas zapisywania jednostek, które nie ujawniają właściwości klucza obcego w swoich relacjach. Właściwość EntityEntries zwróci wartość null, ponieważ nie można zidentyfikować pojedynczej encji jako źródła wyjątku. Obsługa wyjątków podczas zapisywania może być łatwiejsza dzięki ujawnieniu właściwości klucza obcego w typach jednostek. – Forest
Zobacz szczegóły wyjątku InnerException. ---> System.Data.UpdateException: Relacja z zestawu "Foo_Siblings" AssociationSet znajduje się w stanie "Deleted". Biorąc pod uwagę ograniczenia wielokrotności, odpowiedni "Foo_Siblings_Target" musi również znajdować się w stanie "Usunięte". – Forest