通过获取Entity Framework实体列名来输入类型

时间:2011-01-07 10:38:54

标签: entity-framework

我目前正在绑定代码隐藏的控件。

例如:

            var ctx = new MyEntities();
            var source = from o in ctx.Users
                         select o;

            myControl.DataSource = source;
            myControl.DataTextField = "SomeColumn1"; // Can I not typesafe this?
            myControl.DataValueField = "Somecolumn2";
            myControl.DataBind();

理想情况下,我想从EF获取属性名称。其他ORM倾向于为Enum提供所有可用的属性名称。这不是EF的情况吗?

1 个答案:

答案 0 :(得分:1)

ORM是否将此作为内置函数,您可以自己使用反射作为扩展方法。

这是在VB中:

    <Extension()>
    Public Function PropertyName(Of T, TProperty)(ByVal targetObject As T, ByVal expression As Expression(Of Func(Of T, TProperty))) As String
        Return DirectCast(expression.Body, Expressions.MemberExpression).Member.Name
    End Function

所以这会给你类似的东西:

myControl.DataSource = source
myControl.DataTextField = source.First().PropertyName(Function(x) x.SomeColumn1)
myControl.DataValueField = source.First().PropertyName(Function(x) x.SomeColumn2)
myControl.DataBind()

(我正在使用source.First(),因为扩展方法是在类的实例上,而不是实例的集合)

我注意到你的原帖是在C#中:

[Extension()]
public string PropertyName<T, TProperty>(T targetObject, Expression<Func<T, TProperty>> expression)
{
    return ((Expressions.MemberExpression)expression.Body).Member.Name;
}

myControl.DataSource = source;
myControl.DataTextField = source.First().PropertyName(x => x.SomeColumn1);
myControl.DataValueField = source.First().PropertyName(x => x.SomeColumn2);
myControl.DataBind();