我实际需要的是对实体有效的Delete方法。换句话说,我希望能够写
cntx.Orders.Where(item => item.Category == "Custom1").Delete();
,并且应该从表Orders中删除类别列值等于“ Custom1”的所有记录。我不太在乎它是否会立即执行或在调用cntx.SaveChanges()之后执行。而且,是的,查询应该是有效的,类似
DELETE FROM Orders WHERE Category = "Custom1"
我知道至少3个用于Entity Framework Core的扩展库,这些扩展库宣传了这些功能,但是它们都不适用于Android。现在,我在想自己编写Delete扩展方法实际上是多么困难。有人可以帮我举个例子吗?显然,我应该能够在表达式树中添加一些内容,框架将调用该内容,依次生成“从订单中删除”,然后生成“ Where(item => item.Category ==“ Custom1”)“替换为“ WHERE Category =“ Custom1”“
因此,显然所有内容都应从
开始public static class QueryExtension {
public static void Delete<T>(IQueryable<T> objThis) {
// The big mystery is what to call here to ensure that "DELETE FROM [TableName]"
// is entered to the right place of the expression tree and then
// we somehow need to execute the complete statement here or delegate it to SaveChanges
}
}
我有点意识到,表达式树到SQL语句的转换发生在表达式访问者的某个地方。这很可能包装在某种类型的Entity Framework语句编译器中。我不知道所有这些入口点都在哪里写我需要的扩展。