实体框架代码第一:如何映射私有字段?

myn*_*kow 8 entity-framework ef-code-first

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

你能行的 :)

请访问此链接: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);
          }
     }
Run Code Online (Sandbox Code Playgroud)

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

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

      base.OnModelCreating(modelBuilder);
  }
Run Code Online (Sandbox Code Playgroud)

Ser*_*eit 5

实体框架(Code First 与否)不支持映射到字段;只到属性。

更新 正如评论中所指出的,这些文件有点过时,但仍然可以帮助任何初学者:

实体框架代码优先开发资源和文档

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

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

  • 将“DbDatabase”重命名为“Database”。此类还与数据库初始值设定项类一起移至“System.Data.Entity”命名空间。

  • 将“ModelBuilder”重命名为“DbModelBuilder”,以与其他核心类保持一致。

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

  • 完整的 Intellisense 文档。功能 CTP 没有被广泛记录,因为 API 表面在每个版本之间发生了显着变化。此版本包括完整的文档。

  • 删除 Code First 可插入约定。可插拔约定在功能 CTP5 中进行了预览,但在此版本中未达到上线质量。此版本仍支持删除默认约定。

  • 在 Code First 关系 API 中整合 IsIndependent。在功能 CTP5 中配置关系时,IsIndependent 方法用于识别该关系没有在对象模型中公开的外键属性。这现在是通过调用 Map 方法来完成的。HasForeignKey 仍然用于在对象模型中公开外键属性的关系。

  • 10x Sergi,很遗憾很快就无法进行场映射。我想我们会回到NHibernate。 (2认同)