Я пытаюсь удалить элемент из моей таблицы AspNetRoles, который был расширен следующим образом:
public class AspApplicationRoles : IdentityRole
{
public AspApplicationRoles() : base() { }
public AspApplicationRoles(String Name) : base(Name) { }
[Required]
public String ApplicationId { get; set; }
public AspNetApplications Application { get; set; }
}
Это способ, которым я пытаюсь удалить его.Я использую функцию Get с вводом его идентификатора, чтобы получить элемент и пытаюсь удалить его.Тем не менее, я получаю эту ошибку в manager.Delete: {"The object cannot be deleted because it was not found in the ObjectStateManager."}
public RolesDetailsViewModel Get(String Input)
{
AspApplicationRoles data = new AspApplicationRoles() ;
RolesDetailsViewModel rdvm = new RolesDetailsViewModel();
try
{
data = dbContext.AspApplicationRoles.Single(r => r.Id == Input);
rdvm = new RolesDetailsViewModel
{
ApplicationId = data.ApplicationId,
Id = data.Id,
RoleName = data.Name
};
}
catch (Exception e)
{
logger.Error(e, AspNetEventLogs.NotFound);
}
return rdvm;
}
public void Delete(String Input)
{
var store = new RoleStore<AspApplicationRoles>(dbContext);
var manager = new RoleManager<AspApplicationRoles>(store);
try
{
var role = Get(Input);
var r = new AspApplicationRoles
{
Id = role.Id,
ApplicationId = role.ApplicationId,
Name = role.RoleName
};
manager.Delete(r);
logger.Info(AspNetEventLogs.Delete + " Role: " + role.RoleName);
}
catch (Exception e)
{
logger.Error(e, "Failed to delete Role");
}
}
Я пытался найти решение, но если я использую функцию dbContext.Attach, я получаю еще одну ошибку, которая утверждает, что есть2 объекта с одинаковым первичным ключом?
Надеюсь, кто-нибудь увидит это.Спасибо.
РЕДАКТИРОВАТЬ:
Мой код работает, когда я меняю свою функцию удаления на это:
public void Delete(String Input)
{
var store = new RoleStore<AspApplicationRoles>(dbContext);
var manager = new RoleManager<AspApplicationRoles>(store);
try
{
var role = dbContext.AspApplicationRoles.Single(r => r.Id == Input);
manager.Delete(role);
logger.Info(AspNetEventLogs.Delete + " Role: " + role.Name);
}
catch (Exception e)
{
logger.Error(e, "Failed to delete Role");
}
}
Однако возможно ли использовать мою функцию Get вместокаждый раз вызывать функцию LINQ?