Получить максимальную длину для «строкового» столбца, используя LINQ to SQL - PullRequest
6 голосов
/ 04 ноября 2008

Можно ли получить максимальную длину столбца для VARCHAR, CHAR и т. Д.?

Ответы [ 4 ]

4 голосов
/ 04 ноября 2008

Вот способ избежать прикосновения к базе данных:

  • Используя Reflection, получите свойство класса сущности, соответствующее рассматриваемому столбцу.
  • Затем получите атрибут System.Data.Linq.Mapping.Column свойства.
  • Затем проанализируйте свойство DbType этого атрибута (например, NVarChar (255) NOT NULL ), чтобы получить длину столбца.
1 голос
/ 25 сентября 2010
public static int GetLengthLimit(Model.RIVFeedsEntities ent, string table, string field)
{
    int maxLength = 0;   // default value = we can't determine the length

    // Connect to the meta data...
    MetadataWorkspace mw = ent.MetadataWorkspace;

    // Force a read of the model (just in case)...
    // http://thedatafarm.com/blog/data-access/quick-trick-for-forcing-metadataworkspace-itemcollections-to-load/
    var q = ent.Clients;
    string n = q.ToTraceString();

    // Get the items (tables, views, etc)...
    var items = mw.GetItems<EntityType>(DataSpace.SSpace);
    foreach (var i in items)
    {
        if (i.Name.Equals(table, StringComparison.CurrentCultureIgnoreCase))
        {
            // wrapped in try/catch for other data types that don't have a MaxLength...
            try
            {
                string val = i.Properties[field].TypeUsage.Facets["MaxLength"].Value.ToString();
                int.TryParse(val, out maxLength);
            }
            catch
            {
                maxLength = 0;
            }
            break;
        }
    }

    return maxLength;
}
1 голос
/ 18 февраля 2009

Ответил здесь:

Linq to SQL - длина базового столбца

Хотя я обнаружил, что это должно измениться:

public static int GetLengthLimit(Type type, string field) //definition changed so we no longer need the object reference
//Type type = obj.GetType(); //comment this line

и позвонить с помощью:

int i = GetLengthLimit(typeof(Pet), "Name");

Кто-нибудь может придумать, как строго набрать ссылку на поле?

1 голос
/ 04 ноября 2008

В чистом T-SQL вы можете использовать этот запрос:

select max_length from sys.columns as c inner join sys.objects o on c.object_id = o.object_id where o.name = 'myTable' and c.name = 'myColumn'

Для linq-to-sql вам нужно переписать в linq.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...