У меня есть модели, подобные этим:Как удалить объект, когда его свойства ссылаются на один объект?
public class Line
{
public int Id {get; set;}
public int FromStopId {get; set;}
public int ToStopId {get; set;}
public virtual Stop FromStop {get; set;}
public virtual Stop ToStop {get; set;}
}
public class Stop
{
public int Id {get; set;}
public int OwnerId {get; set;}
public virtual Owner Owner {get; set;}
}
Lines
имеют различные Stops
, однако многие Stops
могут иметь один и тот же Owner
.
я загрузить полный Line
объект, используя Include
следующим образом:
public virtual IQueryable<T> Get(int id, params Expression<Func<T, object>>[] include)
{
if (include.Any())
{
var set = include.Aggregate<Expression<Func<T, object>>, IQueryable<T>>
(dbSet, (current, expression) => current.Include(expression));
}
return dbSet.AsNoTracking<T>().Where(x => x.Id == id);
}
Использование выше, я могу загрузить Line
сущность, его Stops
лиц и их Owners
, который в данном случае является то же самое.
Теперь, когда я пытаюсь удалить Line
сущности я делаю:
dbSet.Attach(entity);
dbSet.Remove(entity);
Однако я получаю исключение:
Прикрепления объекта типа «Владелец» не удался из-за другой субъект тот же тип уже имеет такое же значение первичного ключа. Это может произойти при использовании метода «Прикрепить» или установки состояния объекта в «Без изменений» или «Модифицировано», если любые объекты на графике имеют конфликтующие значения ключей. Это может быть связано с тем, что некоторые объекты являются новыми и еще не получили значения ключей базы данных. В этом случае используйте метод «Добавить» или «Добавленное» состояние объекта для отслеживания графика, а затем, если необходимо, установите состояние не новых объектов «Без изменений» или «Модифицировано».
Я предполагаю, что это вызвано тем, что обе Stops
имеют одинаковую Owner
. Однако Owner
не является тем же объектом, кроме двух объектов, которые создаются независимо для каждого Stop
при загрузке Line
.
Как удалить объект Line
в таком случае?
Проверьте, действительно ли эта [ссылка] (http://stackoverflow.com/questions/30350058/attaching-anity-of-type-x-failed-because-another-entity-of-the-same-type) помогает. Если объект загружен из контекста, не прикрепляйте его. – Sarang
@Sarang Объект отсоединен, потому что я использую 'AsNoTracking()'. –