制作通用的getter和setter

时间:2014-02-19 07:14:27

标签: c# collections sqlsiphon

我有一个问题,我必须从我的架构中的所有表中获取列名及其值,并在网格中显示结果。 我已经使用了直接方法,但我必须实现SqlSiphon结构。为此,我必须在模式中为每个表的每一列创建getter和setter,这是不可能的。

我应该使用什么来从表中动态获取列名及其值。

SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
WHERE 
TABLE_NAME = '" + @Tablename1 + "' AND TABLE_SCHEMA='dbo'"

什么是最好的动态解决方案? 什么是最好使用List,Dictionay或类似2d Array的东西,它会给出列名和列值?

2 个答案:

答案 0 :(得分:0)

一些建议:

  • 我不清楚你想要实现什么,但考虑使用ORM(Linq2SQL,WEF,NHibernate)
  • 在.NET中,表示数据库表的合适类型是DataTable

编辑:经过几次重读后,我想我明白了你的问题 - 你已经有了数据库/架构,并且想要自动创建SqlSiphon所需的实体类。这称为“数据库优先”(与模型优先相反)。但是,从SqlSiphon文档的简短扫描看来,它似乎不支持数据库优先。这就是为什么你试图将列放入网格 - 为了更容易手动创建SqlSiphon的实体类?

Edit2 :请注意,尝试在经常修改架构的数据库上使用ORM会有问题。我的下一个猜测是你试图弄清楚如何在SqlSiphon中创建一个实体类,你可以用它来检索像表列这样的数据库模式信息?我仍然在努力理解你在这里问的是什么 - 也许你可以更新你的问题?

Edit3 :我认为你的问题的答案是采用不同的设计方法 - 像SqlSiphon这样的ORM不能用于检索和修改数据库模式本身。

答案 1 :(得分:0)

与其他人解决类似问题的方式相比,可能值得退一步。

通常,数据库上的每个表都代表一个实体,每个实体也有一个类,您可以使用ORM系统来避免重复工作。因此,在典型的系统中,您有一个供客户使用的表,一张发票表和一张发票行表等,然后是一个代表客户的类,一个发票类,一个发票行类等等。稍后添加功能(以及可能的列/属性),您可以更改类,而不仅仅是查看数据库中的列 - 您当然可以使用XML文档来装饰这些列并获得Intelisense的优点。

有许多ORM系统,每个都有自己的优点和缺点,但我个人喜欢LINQ to SQL添加到现有数据模型。