删除实体
Fireasy 提供了一组 Delete / DeleteAsync 方法来删除数据,并且是实时生效的。
1、删除单一实体
Delete / DeleteAsync 方法用于将对一个实体对象从库中删除。
[TestMethod]
public void TestDelete()
{
using (var db = new DbContext())
{
var order = db.Orders.Get(1);
if (order != null)
{
db.Orders.Delete(order);
}
}
}
[TestMethod]
public async Task TestDeleteAsync()
{
using (var db = new DbContext())
{
var order = await db.Orders.GetAsync(1);
if (order != null)
{
await db.Orders.DeleteAsync(order);
}
}
}
2、使用主键值删除
该组方法使用指定的主键值进行删除。它的使用与 Get 方法类似。下面的例子中,将通过一组主键删除数据,订单明细 OrderDetails
类有 OrderId 和 ProductId 这两个主键。
[TestMethod]
public void TestDeleteByPrimaryKeys()
{
using (var db = new DbContext())
{
db.Orders.Delete(1);
db.OrderDetails.Delete(1, 1);
}
}
3、使用 lambda 表达式删除
这组方法提供了使用 lambda
表达式删除符合条件的实体的方法。返回值为删除的数据条数。
[TestMethod]
public void TestDeleteByExpression()
{
using (var db = new DbContext())
{
db.Orders.Delete(s => s.OrderDate > DateTime.Now);
}
}
💡 关于逻辑删除
在业务系统中,很多时候并不真正删除数据,删除操作只是对数据做逻辑删除标记,数据还是物理存储在库中。 在属性的元数据中,介绍到了一个 IsDeletedKey 属性(详见 属性映射), 该属性即用来标记数据的逻辑删除状态,Delete / DeleteAsync 方法都提供了 logicalDelete 参数,默认为 true,即实体类型的定义中,如果有属性标记为 IsDelectedKey,则将采取逻辑删除操作。如果要真正删除,手动给定 false 值,数据才会真正删除。