2

私は、DBML から特定の列のタイプと長さを見つけることを任されています。

DataContext、TableName、次に ColumnName を渡して、探している値を返したいと思います。似たような次の例を見つけましたが、何も返されません。

http://www.codeproject.com/Articles/27392/Using-the-LINQ-ColumnAttribute-to-Get-Field-Length

ただし、これを正しく実装していない可能性があります。objパラメータの場合、DataContext に渡す必要がありますか? info(オブジェクト配列) を読み込もうとすると、何も得られないことがわかりました...

    public static int GetLengthLimit(object obj, string field)
    {
        int dblenint = 0;   // default value = we can't determine the length

        Type type = obj.GetType();
        PropertyInfo prop = type.GetProperty(field);


        // Find the Linq 'Column' attribute
        // e.g. [Column(Storage="_FileName", DbType="NChar(256) NOT NULL", CanBeNull=false)]
        object[] info = prop.GetCustomAttributes(typeof(ColumnAttribute), true);
        // Assume there is just one
        if (info.Length == 1)
        {
            ColumnAttribute ca = (ColumnAttribute)info[0];
            string dbtype = ca.DbType;

            if (dbtype.StartsWith("NChar") || dbtype.StartsWith("NVarChar") || dbtype.StartsWith("VarChar"))
            {
                int index1 = dbtype.IndexOf("(");
                int index2 = dbtype.IndexOf(")");
                string dblen = dbtype.Substring(index1 + 1, index2 - index1 - 1);
                int.TryParse(dblen, out dblenint);
            }
        }
        return dblenint;
    }
4

2 に答える 2

0

いいえ、エンティティの 1 つのインスタンスを渡します。

Type実際には、インスタンスではなくパラメーターとして aを取るように変更します。

于 2013-04-22T14:24:46.550 に答える