【问题标题】:How can I have Entity Framework return related objects with some defaults?如何让实体框架返回具有一些默认值的相关对象?
【发布时间】:2011-08-03 19:34:52
【问题描述】:

假设我有项目和任务 EF 代码第一课

public class Project
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public virtual ICollection<Task> Tasks { get; set; }
    }

    public class Task
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public int ProjectId { get; set; }
        public bool IsDeleted {get; set;}
        public virtual Project Project { get; set; }
    }

说我有

public void SomeAction()
{
Project p= repository.GetById(1);
var tasks = p.Tasks;
//var tasks = p.Tasks.Where(t=>t.IsDeleted==false);
}

我希望我的 Project 类上的 Tasks 属性将始终在 IsDeleted 上执行该过滤器并仅返回该子集...以避免不得不到处写该条件...

有什么建议吗?

编辑:

我首先使用 EF 代码

【问题讨论】:

    标签: entity-framework


    【解决方案1】:

    在 OnModelCreating 方法中为您的模型添加鉴别器

    modelBuilder.Entity<TEntity>().Map(m => m.Requires("IsDeleted").HasValue(false));
    

    注意事项

    • 您无法再加载已删除的项目(除非您将 IsDeleted true 映射到另一个实体,否则您可能会丢失自动过滤)
    • poco 类不能有 IsDeleted 属性(无法映射鉴别器)
    • 因为无法映射 IsDeleted,您需要首先运行原始 SQL 来删除实体。

    【讨论】:

    • 你能在The poco class cannot have the IsDeleted property (discriminators cannot be mapped)上解释更多吗?
    【解决方案2】:

    EF Code first = NO WAY. EDMX 中可用的一长串功能中只有一个,并且在 code first 中完全缺失。来自 EDMX 的映射条件可以做到这一点,但它仍然存在问题,因为它是硬编码的并且无法更改(= 即使您想加载已删除的实体,除非您使用另一个 EDMX,否则您将永远无法加载)。解决方案是在 EF 中实现全局过滤器,但 EF 没有类似的东西,尽管旧的 Linq-to-entities 至少有它们用于关系 (DataLoadOptions.AssociateWith)。

    如果您不能使用急切或延迟加载而不将已删除的实体加载到您的应用程序并在应用程序的内存中进行过滤,这会更加痛苦。

    【讨论】:

      【解决方案3】:

      在模型设计器中,选择您的任务实体,然后打开映射详细信息窗口。这应该向您显示您的实体映射到的数据库表以及所有列。在“映射到 [YourTable]”的下方,您应该会看到一个选项 &lt;Add a Condition&gt;。这应该可以让你设置一个你正在寻找的条件。

      【讨论】:

      • 谢谢你。我应该澄清一下我使用的是 EF Code First 4.1
      • 您可以使用分配给公共属性的私有变量,而不是使用自动属性。私有变量将分配默认值。
      猜你喜欢
      • 1970-01-01
      • 2010-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多