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

时间:2011-03-21 12:44:02

标签: 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);
          }
     }

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

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

      base.OnModelCreating(modelBuilder);
  }

1 个答案:

答案 0 :(得分:4)

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

<强>更新 正如评论中指出的那样,这些文件有点过时,但可能仍然有助于任何初学者:

  

Entity Framework Code first development Resources and Documentation

为了完整起见,有一个链接指向EF 4.1 RC中包含的内容:EF 4.1 Release Candidate Available

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

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

  •   
  • 将'ModelBuilder'重命名为'DbModelBuilder',以便与   其他核心课程。

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

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

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

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

  •