繁体   English   中英

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

[英]Auto generate class properties by binding to database lookup table

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

例如,如果我有一个包含2列的国家/地区的表格:代码,国家/地区名称。 我希望有一种方法可以将该表中的所有行转换为具有适用于每行的类,因此我可以执行以下操作:

string countryCode = Country.Egypt.Code

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

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

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

  1. 右键单击您的项目,然后将“添加/新建项/ LINQ添加到SQL类”。 默认情况下,这将使用DataClasses1DataContext类生成一个DataClasses1.dbml文件。
  2. 在“服务器资源管理器”中的“数据连接”下展开感兴趣的数据库连接(您可能需要先通过右键单击“数据连接”在其中添加它)。
  3. 挑选感兴趣的表并将其拖放到DataClasses1.dbml的表面上。

假设您的表名是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#文本的小程序应该是一个相当简单的练习。

但是,即使这样做,您将如何处理数据库更改? 说,从数据库中删除了一个值,但是它仍然存在于您的程序中,因为它在编译时就存在了吗? 还是已添加到数据库,但是程序中缺少它?

因为Country.Egypt必须在编译时可用,所以不能这样做。 我认为您的选择是:

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

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

  3. 保持属性和代码静态声明,并在应用程序启动期间对照数据库检查它们。

在上面的#1之后,如果客户端代码不依赖于各个属性名称,则它们不是类型而是数据,因此您也可以使用Country.AllCountries属性在启动时进行初始化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM