SubSonic 3 MaxLength для колонки - PullRequest
1 голос
/ 13 октября 2009

У меня неуклюжий способ получить максимальную длину столбца в базе данных, но это так плохо, что кажется неправильным:

var length = new DataNS.WidgetTable(provider).description.MaxLength

Неужели мне действительно нужно создать какой-то объект и копаться в нем? Мне даже нужно явно передать ему провайдера.

Если это действительно верный способ сделать это, что лучше, чтобы текущий провайдер передал ему? Если это не так, как лучше?

Ответы [ 4 ]

1 голос
/ 07 января 2010

Если вы используете ActiveRecord, то у вашего объекта есть свойство столбца [COLUMN_NAME], которое содержит всю эту информацию. Поэтому, если у вас есть объект Post (например, «post»), вы можете использовать post.TitleColumn.MaxLength.

Если вы используете SubSonic 3, вы можете зайти в Structs.tt и раскрутить все, что вам нужно.

1 голос
/ 13 октября 2009

Да, это кажется немного неуклюжим, но я не вижу менее неуклюжего способа получения значений MaxLength. Для получения текущего поставщика вы можете просто использовать метод GetProvider класса SubSonic.DataProviders.ProviderFactory. Итак, ваш пример будет выглядеть примерно так:

var length = new DataNS.WidgetTable(ProviderFactory.GetProvider()).description.MaxLength;
0 голосов
/ 27 января 2010

Я получил что-то подобное для работы в SubSonic 3, используя ActiveRecord, он работает:

new AccountsTable(null).ContactEmail.MaxLength

Я использую его в виде ASP.NET MVC:

<%= Html.TextBoxFor(model => model.ContactEmail,
new { maxlength = new AccountsTable(null).ContactEmail.MaxLength  })%>

Но не уверен, что передача значения null в конструкторе AccountsTable приведет к некоторой путанице - кто-нибудь знает, не рекомендуется ли это? Я пытался найти другой способ, как можно более кратким, но на этом я и остановился.

0 голосов
/ 07 января 2010

В дозвуковом 2.2 делаю следующее. Разве это не работает в 3?

var length = Template.Schema.GetColumn("Name").MaxLength;
...