我有一种笨拙的方法来获取数据库中列的最大长度,但它太糟糕了,似乎错了:
var length = new DataNS.WidgetTable(provider).description.MaxLength
我是否真的需要实例化一些对象并深入研究它?我甚至必须明确地将提供者传递给它。
如果这确实是正确的方法,那么让当前提供商传递给它的最佳方法是什么?如果不是,最好的方法是什么?
答案 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是否会在某些时候绊倒 - 有人知道这是不可取的吗?我试图找到另一种方式,尽可能简洁,但这是我最终的结果。