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)
实体框架(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 仍然用于在对象模型中公开外键属性的关系。
| 归档时间: |
|
| 查看次数: |
4014 次 |
| 最近记录: |