从Class中获取Nvarchar长度

时间:2015-06-23 07:24:51

标签: c# ado.net

我在SQL服务器中使用Class作为表

然后是下面的属性

[Column(Storage = "_new_name", DbType = "nvarchar (2000)")]
public string new_name { get { return _new_name; } set { _new_name = value; } }

因此。我可以使用C#

从班级中获取长度吗?

在这种情况下,它是2000年

感谢

1 个答案:

答案 0 :(得分:1)

如果不诉诸反思,你就不能轻易。属性是元数据,因此它们仅使用各种进程所需的附加信息来装饰代码。在您的情况下,您的ORM可以识别哪个属性映射到哪个列。

假设您有这样的课程:

public class TestTable
{
    private string _new_name;
    private string _address;

    [Column(Storage = "_new_name", DbType = "nvarchar (2000)")]
    public string new_name {
        get
        {
            return _new_name;
        }
        set
        {
            _new_name = value;
        }
    }

    [Column(Storage = "_address", DbType = "nvarchar (5000)")]
    public string address {
        get
        {
            return _address;
        }
        set
        {
            _address = value;
        }
    }
}

您可以从以下属性中读取属性值:

var properties = typeof(TestTable).GetProperties();

var attributesPerProperty = new Dictionary<string, string>();
foreach (var propertyInfo in properties)
{
    var attribute = System.Attribute.GetCustomAttributes(propertyInfo).FirstOrDefault();

    if(attribute is ColumnAttribute)
    {
        var columnAttribute = (ColumnAttribute)attribute;
        attributesPerProperty.Add(propertyInfo.Name, columnAttribute.DbType);
    }
}

这不是一种理想的做事方式,我刚刚给出了一个粗略的例子,但如果你真的需要从你的课堂上阅读这类信息,那么上面的内容就会帮助你。