Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架代码优先:如何映射私有字段?_Entity Framework_Ef Code First - Fatal编程技术网

Entity framework 实体框架代码优先:如何映射私有字段?

Entity framework 实体框架代码优先:如何映射私有字段?,entity-framework,ef-code-first,Entity Framework,Ef Code First,是否可以将表列映射到类字段而不是类属性,以及如何映射 你可以做到:) 请点击此链接: 这是一个共同的要求,而且确实有道理;我们需要使用LINQ表达式和一些反射魔法。首先是一个帮助函数,用于返回指向成员的表达式: public static class ExpressionHelper { public static Expression<Func<TEntity, TResult>> GetMember<TEntity,

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

你可以做到:)

请点击此链接:

这是一个共同的要求,而且确实有道理;我们需要使用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);
          }
     }
公共静态类ExpressionHelper
{
公共静态表达式GetMember(字符串memberName)
{
ParameterExpression参数=表达式参数(typeof(tenty),“p”);
MemberExpression member=Expression.MakeMemberAccess(参数,typeof(tenty).GetMember(memberName,BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Single();
Expression=Expression.Lambda(成员,参数);
返回(表达式);
}
}
然后,我们在DbContext.OnModelCreating方法上调用它,作为StructureTypeConfiguration.Property的参数:

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

      base.OnModelCreating(modelBuilder);
  }
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().Property(ExpressionHelper.GetMember(“预算”)).IsRequired();
基于模型创建(modelBuilder);
}
实体框架(代码优先或不优先)不支持映射到字段;仅适用于属性

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

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

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

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

  • 将“ModelBuilder”重命名为“DbModelBuilder”,以与 其他核心课程

  • 首先在模型中进行验证,然后在数据库中进行验证。新的验证 功能仅在代码中受支持 首先是CTP5。在验证过程中 该功能将与这三个功能一起使用 开发工作流程(模型优先, 数据库优先,代码优先)

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

  • 删除代码优先可插拔约定。可插拔约定 在功能CTP5中预览,但 我们不具备这方面的现场质量 释放。此版本仍然支持 取消默认约定

  • 在代码优先关系API中整合IsIndependent。什么时候 在功能中配置关系 CTP5采用独立的方法 确定关系是否 没有外键属性 暴露在对象模型中。这是 现在通过调用Map方法完成。 HasForeignKey仍然用于 使用外键的关系 属性在对象中公开 模型


+我同意。我一直在寻找一个链接,解释之前张贴,但我没有找到它。无论如何,我很确定这就是EF的工作原理。我已经阅读了所有这些文档。顺便说一句,他们都老了。新的RC甚至有突破性的变化。这就是为什么我要问。ef esIt确实存在制动变化,但AFAIK的议程中没有对字段映射的支持。很抱歉,这些过时的文档,我不知道您的EF知识水平,并且认为它们可能会很有用。10x Sergi,很遗憾,很快就不可能进行字段映射。“我想我们会回到NHibernate的。”mynknow-只是出于好奇,你为什么要映射到一个领域?你可以映射到一个私有财产,没问题。。。