是否可以将表列映射到类字段而不是类属性以及如何映射?
你可以做到:)
这是一个普遍的要求,真的很有意义;我们需要使用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);
}
答案 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仍然用于 关键所在的外键 属性在对象中公开 模型。