实体框架代码第一:如何映射私人领域?

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

你能行的 :)

请点击此链接: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);
  }

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

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

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

为了完整起见,继承人与EF 4.1 RC中包含的内容链接:EF 4.1 Release Candidate Available

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

  • 将'DbDatabase'重命名为'Database'。 这个类也移动到了'System.Data.Entity'命名空间,以及数据库初始化类。

  • 将'ModelBuilder'重命名为'DbModelBuilder',以便与其他核心类对齐。

  • 首先在模型优先和数据库验证。 新的验证功能仅在CTP5的Code First中受到支持。 在RC中,验证功能将与所有三种开发工作流程(Model First,Database First和Code First)协同工作。

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

  • 删除代码优先可插入约定。 功能CTP5中预览了可插入约定,但此版本的上传质量并未达到。 此版本仍支持删除默认约定。

  • 在代码优先关系API中合并IsIndependent 。 在Feature CTP5中配置关系时,使用IsIndependent方法来标识该关系在对象模型中没有公开外键属性。 这现在通过调用Map方法完成。 HasForeignKey仍用于外键属性在对象模型中公开的关系。

  • 链接地址: http://www.djcxy.com/p/51523.html

    上一篇: Entity Framework Code First: How to map private fields?

    下一篇: Get the screenshot of a streaming video on iphone