【问题标题】:Entity Framework Code First: How to map private fields?实体框架代码优先:如何映射私有字段?
【发布时间】:2014-04-03 19:00:37
【问题描述】:

是否可以将表列映射到类字段而不是类属性以及如何映射?

你可以做到的:)

点击此链接:http://weblogs.asp.net/ricardoperes/archive/2013/08/22/mapping-non-public-members-with-entity-framework-code-first.aspx

这是一个常见的要求,而且确实有道理;我们需要使用 LINQ 表达式和一些反射魔法。首先,返回一个指向成员的表达式的辅助函数:

      public static class ExpressionHelper
      {
          public static Expression<Func<TEntity, TResult>> GetMember<TEntity, TResult>(String memberName)
          {
              ParameterExpression parameter = Expression.Parameter(typeof(TEntity), "p");
              MemberExpression member = Expression.MakeMemberAccess(parameter, typeof(TEntity).GetMember(memberName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Single());
              Expression<Func<TEntity, TResult>> expression = Expression.Lambda<Func<TEntity, TResult>>(member, parameter);
              return (expression);
          }
     }

然后,我们在 DbContext.OnModelCreating 方法上调用它,作为 StructuralTypeConfiguration.Property 的参数:

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
      modelBuilder.Entity<Project>().Property(ExpressionHelper.GetMember<Project, Decimal>("Budget")).IsRequired();

      base.OnModelCreating(modelBuilder);
  }

【问题讨论】:

    标签: entity-framework ef-code-first


    【解决方案1】:

    实体框架(代码优先与否)不支持映射到字段;仅适用于属性。

    更新 正如 cmets 中所指出的,这些文档有些过时,但仍可能对任何初学者有所帮助:

    Entity Framework Code first development Resources and Documentation

    为了完整起见,这里是 EF 4.1 RC 中包含的内容的链接:EF 4.1 Release Candidate Available

    自 CTP5 以来的变化(来自上面的链接):

    • 将“DbDatabase”重命名为“Database”。这堂课也搬家了 到“System.Data.Entity” 命名空间,以及数据库 初始化类。

    • “ModelBuilder”重命名为“DbModelBuilder”,以与 其他核心类。

    • 模型优先和数据库优先的验证。新的验证 功能仅在代码中受支持 首先在 CTP5 中。在 RC 中验证 功能将适用于所有三个 开发工作流程(模型优先, 数据库优先,代码优先)。

    • 完整的 Intellisense 文档。 功能 CTP 没有广泛记录 因为 API 表面正在改变 每次发布之间显着。 此版本包括完整的 文档。

    • 删除 Code First 可插拔约定。 可插拔约定 在 Feature CTP5 中进行了预览,但 没有达到上线质量 发布。此版本仍然支持 删除默认约定。

    • IsIndependent 的整合 在 Code First 关系 API 中。什么时候 在 Feature 中配置关系 CTP5 使用了 IsIndependent 方法 确定关系确实 没有外键属性 暴露在对象模型中。这是 现在通过调用 Map 方法完成。 HasForeignKey 仍用于 外键的关系 属性暴露在对象中 型号。

    【讨论】:

    • +1 我同意。在发布之前我一直在寻找一个解释它的链接,但我没有找到它。无论如何,我很确定这就是 EF 的工作原理。
    • 我已经阅读了所有这些文件。顺便说一句,他们老了。新的 RC 甚至有重大变化。这就是我问的原因。 ef ef es
    • 确实有刹车变化,但支持映射到字段不在 AFAIK 的议程中。很抱歉这些过时的文档,不知道您的 EF 知识水平,并认为它们可能还是有用的。
    • 10x Sergi,很遗憾不能很快实现字段映射。我想我们会回到 NHibernate。
    • @mynknow - 只是出于好奇,您为什么要映射到一个字段?您可以映射到私有财产,那里没问题...
    猜你喜欢
    • 2011-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 2011-04-21
    相关资源
    最近更新 更多