Is it possible to map a table column to a class field instead of a class property and how?
YOU CAN DO IT:)
Follow this link: http://weblogs.asp.net/ricardoperes/archive/2013/08/22/mapping-non-public-members-with-entity-framework-code-first.aspx
This is a general request and really makes sense; we need to use LINQ expressions and some reflection magic. First, a helper function to return an expression that points to a member:
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); } }
Then we call it the DbContext.OnModelCreating method as a parameter for StructuralTypeConfiguration.Property:
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Project>().Property(ExpressionHelper.GetMember<Project, Decimal>("Budget")).IsRequired(); base.OnModelCreating(modelBuilder); }
mynkow
source share