通过绑定到数据库查找表自动生成类属性

时间:2011-10-02 11:48:49

标签: c# .net database

我不确定这是否可行,但在C#中是否有一种方法可以生成数据库表中所有查找值的静态成员或枚举器?

例如,如果我有一个包含2列国家/地区的表:code,countryname。我想要一种方法将此表中的所有行转换为每行具有适当性的类,以便我可以执行以下操作:

string countryCode = Country.Egypt.Code

其中埃及是数据库表中生成的属性。

2 个答案:

答案 0 :(得分:1)

当您说“转换所有行”时,您实际上是指“转换所有”吗?

我是这样,如果您的ADO.NET提供程序支持它,您可以使用 LINQ to SQL 自动生成一个具有与表中列相匹配的属性的类。您可以按照以下步骤操作:

  1. 右键单击项目并添加/新建项目/ LINQ to SQL类。默认情况下,这将生成一个带有DataClasses1DataContext类的DataClasses1.dbml文件。
  2. 在数据连接下展开服务器资源管理器中感兴趣的数据库连接(您可能需要先通过右键单击数据连接将其添加到那里)。
  3. 选择感兴趣的表并将其拖放到DataClasses1.dbml的表面。
  4. 假设你的表名是COUNRTY,字段名为NAME和CODE,你可以在代码中使用它,如下所示:

    using (var db = new DataClasses1DataContext()) {
        COUNRTY egypt = db.COUNRTies.Where(row => row.NAME == "Egypt").SingleOrDefault();
        if (egypt == null) {
            // "Egypt" is not in the database.
        }
        else {
            var egypt_code = egypt.CODE;
            // Use egypt_code...
        }
    }
    

    如果您实际上是指“行”,我不知道这样做的自动方式(这并不意味着它不存在!)。编写一个遍历所有行的小程序,提取实际值并生成一些C#文本应该是一个相当简单的练习。

    但即使你这样做,你会如何处理数据库更改?比如,一个值从数据库中删除但它仍然存在于您的程序中,因为它在编译时存在?或者已添加到数据库中,但程序中缺少该文件?

答案 1 :(得分:0)

这是不可能的,因为{em}必须在编译时可用。我认为你的选择是:

  1. 从数据库生成Country类的代码。当然,问题是客户将如何使用它?

  2. 保持静态声明属性并在应用程序启动期间从数据库中读取其代码

  3. 保留属性以及静态声明的代码,并在应用程序启动期间针对数据库进行检查。

  4. 除了上面的#1之外,如果客户端代码不依赖于各个属性名称,那么这些不是类型而是数据,您也可以使用Country.Egypt属性来启动时初始化。