Если вы не хотите идти в базу данных для извлечения всех полей объекта, вы можете создать новый экземпляр класса, прикрепить его к новому контексту, удалить его и сохранить изменения. Это позволяет EF генерировать соответствующую команду удаления.
using (var context = new MyContext())
{
var myObject = new MyObject { ID = 3 };
context.MyObjectSet.Attach(myObject);
context.MyObjectSet.DeleteObject(myObject);
context.SaveChanges();
}
Примечание: это приведет к исключению, если вы пытаетесь удалить объект, который не существует. Это подходит только в том случае, если вы уверены, что объект существует.
Примечание 2: это предполагает, что вы настроили свои объекты таким образом, чтобы не сгенерирована Удалить ссылки команду никаких других полей, чем идентификатор (имеется в виду не свойства Timestamp, или что-нибудь подобное, которые будут включены в запрос)
Действительно ли это работает? Милая! Это будет полезно. +1 – BZink
Он работает, но я должен был добавить, что он работает только в том случае, если команда удаления сгенерированного EF ссылается на другие поля, кроме ID. Если у вас есть поле Timestamp, EF будет включать это в сгенерированный запрос, но поскольку он не знает значения для использования, запрос будет неправильным. – hvd