删除实体


  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 值,数据才会真正删除。