Linq to Entities удалить
Есть ли встроенный способ удаления с Linq в Entites с использованием Первичного ключа.
В настоящее время мы работаем над созданием хранимой процедуры, называемой DeleteTable (таблица является именем таблицы)
а затем в С# LINQ To Entities я просто создаю контекст. DeleteTable (ID)
Это лучший способ? Какие еще существуют варианты?
Ответы
Ответ 1
Если вы не хотите идти в базу данных для извлечения всех полей объекта, вы можете создать новый экземпляр класса, прикрепить его к новому контексту, удалить его и сохранить изменения. Это позволяет EF генерировать соответствующую команду удаления.
using (var context = new MyContext())
{
var myObject = new MyObject { ID = 3 };
context.MyObjectSet.Attach(myObject);
context.MyObjectSet.DeleteObject(myObject);
context.SaveChanges();
}
Примечание. Это приведет к исключению из того, что вы пытаетесь удалить объект, который не существует. Это подходит только в том случае, если вы уверены, что объект существует.
Примечание 2: предполагается, что вы настроили свои объекты так, чтобы сгенерированная команда удаления не ссылалась на другие поля, кроме ID (что означает отсутствие свойств Timestamp или что-либо подобное, что было бы включено в запрос)
Ответ 2
По умолчанию будет запрашивать объект, а затем выпустить метод .DeleteObject(...).
Ответ 3
Вы можете использовать методы DbSet<T>.Remove(entity)
(Версия 4.1, 4.2) или EntitySet<T>.Remove(entity)
(Версия 1.0, 4.0):
YourDbContext.Table.Remove(entityObject);
Ответ 4
Я использую для поиска элементов (ов) для удаления, а затем удалять их (их) с помощью метода DeleteObject.
Dim itemToDelete = (From u In db.SOME_TABLE Where u.ID = ID).FirstOrDefault
db.SOME_TABLE.DeleteObject(itemToDelete)
db.SaveChanges()
используйте это внутри блока catch try
Ответ 5
Используйте команду execute для ваших нужд вне контекста, например:
mycontext.ExecuteCommand("DELETE FROM MYTABLE");
или
mycontext.ExecuteCommand("TRUNCATE TABLE MYTABLE");
НТН