Сведения о вопросе

Getthesound

17:22, 1st August, 2020

Теги

linq-to-sql    

Linq для SQL - базовой длины столбца

Просмотров: 384   Ответов: 3

Я использую Linq для SQL в течение некоторого времени, и я нахожу его очень полезным и простым в использовании. С другими инструментами ORM, которые я использовал в прошлом, объект entity, заполненный из базы данных, обычно имеет свойство, указывающее длину базового столбца данных в базе данных. Это полезно в ситуациях привязки данных, когда можно установить свойство MaxLength на textbox, например, чтобы ограничить длину ввода, введенного пользователем.

Я не могу найти способ с помощью Linq до SQL получить длину базового столбца данных. Кто-нибудь знает, как это сделать? Помогите пожалуйста.



  Сведения об ответе

#hash

04:26, 10th August, 2020

Использование LINQ ColumnAttribute для получения длин полей из базы данных :

http://www.codeproject.com/KB/cs/LinqColumnAttributeTricks.aspx


  Сведения об ответе

appple

06:35, 7th August, 2020

Спасибо. На самом деле оба этих ответа, похоже, работают. К сожалению, они, похоже, смотрят на атрибуты Linq, созданные при создании кода. Хотя это казалось бы правильным решением, в моей ситуации мы продаем программные продукты, и иногда клиент будет расширять некоторые длины столбцов для размещения своих данных. Таким образом, длина поля, сообщаемая с помощью этого метода, не всегда может отражать истинную длину базового столбца данных. Ну что ж, это ведь не вина Linq-го по SQL-му? :)

Спасибо за быстрые ответы!


  Сведения об ответе

VERSUION

07:52, 24th August, 2020

Если вам нужно знать точную длину столбца, вы можете обратиться к самим классам System.Data. Что-то вроде этого:

var context = new DataContextFromSomewhere();
var connection = context.Connection;
var command = connection.CreateCommand( "SELECT TOP 1 * FROM TableImInterestedIn" );
var reader = command.ExecuteReader();
var table = reader.GetSchemaTable();

foreach( var column in table.Columns )
{
    Console.WriteLine( "Length: {0}", column.MaxLength );

}


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться