在 linq 中更改实体条件

本文关键字:实体 条件 linq | 更新日期: 2023-09-27 18:32:57

在实体设计器中,我在实体上设置了条件映射,它通过"isactive"字段过滤所有客户。

这很好用,没有问题,但问题出在我的 linq 中。

当我需要将客户设置为"IsActive=false"时会发生什么。该属性未映射到我的实体,因为条件已映射,但在 Linq 中,我找不到更改它的方法。

using (var db = new CustDbConn())
{
   Customer customer= db.Customers.Single(p => p.Id == idFromEmail);
   customer.IsActive = false; //<----NOT FOUND, can not resolve 'isActive'
}

必须有一种方法可以访问和更改 LINQ 中的条件,有人可以对此有所了解吗?我想过绕过模型并使用 SqlCommand 更新它,但我不应该经历所有这些。

在 linq 中更改实体条件

不能使用 LINQ 查询更改模型(这是您尝试执行的操作)。

操作IsActive属性的唯一方法是将其引入Customer模型中,并丢弃条件映射。

UPD

你误解了条件映射的主要目的 - 继承。
请注意,使用 EF 时,不使用数据库表,而是使用实体类型。你所拥有的只是一个模型。如果模型中缺少任何表字段,则无法通过模型访问它。关于您的问题,是的,您无法更改患者的活动状态,因为模型中没有活动状态

是的,如果您计划使用某种删除/活动标记(如示例中的IsActive),则必须将其包含在查询中,否则您将在结果中获得非活动/已删除的项目。当然,你可以制作帮助程序/存储库/包装器/等来自动化它:

interface IEntity
{
    int Id { get; }
    bool IsActive { get; set; }
}
interface IRepository<T>
    where T : IEntity
{
    IQueryable<T> Get(bool includeInactiveEntities = false);
}