用于柱的SubSonic 3 MaxLength

时间:2009-10-12 21:22:38

标签: subsonic

我有一种笨拙的方法来获取数据库中列的最大长度,但它太糟糕了,似乎错了:

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

我是否真的需要实例化一些对象并深入研究它?我甚至必须明确地将提供者传递给它。

如果这确实是正确的方法,那么让当前提供商传递给它的最佳方法是什么?如果不是,最好的方法是什么?

4 个答案:

答案 0 :(得分:1)

是的,这看起来有点笨拙,但我看不出任何不那么笨拙的方式获得MaxLength值。要获取当前提供程序,您只需使用SubSonic.DataProviders.ProviderFactory类的GetProvider方法即可。所以你的例子看起来像是:

var length = new DataNS.WidgetTable(ProviderFactory.GetProvider()).description.MaxLength;

答案 1 :(得分:1)

如果您使用ActiveRecord,那么您的对象有一个[COLUMN_NAME] Column属性,其中包含所有这些信息。因此,如果您实例化Post对象(如“post”),则可以使用post.TitleColumn.MaxLength。

如果您正在使用SubSonic 3,您可以前往Structs.tt并旋转您需要的任何内容。

答案 2 :(得分:0)

在亚音速2.2中我做了以下几点。这不适用于3?

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

答案 3 :(得分:0)

我使用ActiveRecord在SubSonic 3中使用这样的东西,它可以工作:

new AccountsTable(null).ContactEmail.MaxLength

我在ASP.NET MVC视图中使用它:

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

但不确定在AccountsTable构造函数中传递null是否会在某些时候绊倒 - 有人知道这是不可取的吗?我试图找到另一种方式,尽可能简洁,但这是我最终的结果。