提示在POCO上使用MVC视图生成器获取主键

时间:2010-04-19 09:54:10

标签: asp.net-mvc

为我的模型生成强类型的索引视图时,我总是得到以下结果:

<%= Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) %>

我正在使用POCO类与我们的ORM一起使用。据我所知,在使用LINQ to SQL时,视图代码将知道哪个字段是主键。

是否有一种方法可以使属性(或类)的属性能够让View Generator知道ID属性是否为主键?

2 个答案:

答案 0 :(得分:3)

您可以直接使用KeyAttribute,也可以使用好友类或关联的元数据提供商。

答案 1 :(得分:1)

如果我理解正确

[Column(IsPrimaryKey=true)]

应该有用。

建议基于功能

public static List<string> GetEntityKeyProperties(Type type)
{
    List<string> keyProperties = new List<string>();

    PropertyInfo[] properties = type.GetProperties();

    foreach (PropertyInfo pi in properties)
    {
        System.Object[] attributes = pi.GetCustomAttributes(true);

        foreach (object attribute in attributes)
        {
            if (attribute is EdmScalarPropertyAttribute)
            {
                if ((attribute as EdmScalarPropertyAttribute).EntityKeyProperty == true)
                {
                    keyProperties.Add(pi.Name);
                }
            } else if(attribute is ColumnAttribute) {
                if ((attribute as ColumnAttribute).IsPrimaryKey == true)
                {
                    keyProperties.Add(pi.Name);
                }
            }
        }
    }

    return keyProperties;
}

放在MVC 1中的List.tt模板中。