如何在我的 C# 代码中模拟数据库 table 结构

How to mock a database table structure in my C# code

我需要创建一个新数据库 table 来保存一些业务规则,但是它需要一段时间才能实现(需要 DBA)。与此同时,我想重新创建我的代码中保存的数据,以便我可以继续编码和测试它,然后在准备好后切换到数据库。

一个示例是具有 10 列的 table 结构,前 4 列包含唯一组合,我将使用它来提取最后 6 列中的关联值。

例如 公司、州、类型、数字(我会得到它们的值),然后是第 5 列、第 6 列、第 7 列、第 8 列、第 9 列、第 10 列,然后我将提取它们的值。

我查看了散列 tables,但它们似乎是一对值对的一个键,我不确定是否可以使用 4 个键来获取 6 个值。

我知道这很模糊,但希望有人能指出我可以使用的数据结构的正确方向(顺便说一下,这只是后端,我不需要向用户显示)。

与服务和存储库接口的程序。

例如:

创建 ICompanyRepository:

interface ICompanyRepository 
{
    IEnumerable<Company> GetCompanies();
}

class DummyCompanyRepository : ICompanyRepository 
{
    private Dictionary<int, Company> _data;

    public DummyCompanyRepository()
    {
         //populate your dictionary
    }
    public IEnumerable<Company> GetCompanies() 
    {
         // return all dictionary.values;
    }
}

然后您的控制器(或服务)可以采用 ICompanyRepository,一旦 DBA 可用,您就可以将我们的 DummyRepositories 换成 ConcreteRepositories。

假设您没有使用 ORM,您最好使用 repository pattern 作为@DarrenYoung 评论和@axlj 提供的答案。您不应该将数据层与应用层紧密结合起来,这种模式会阻止您这样做。

但是,如果您真的只是想模拟数据库 table,您可以使用 DataSet and DataTable 类,它提供类似内存数据库和 table 类数据结构。

创建 table 就这么简单:

DataTable myTable = new DataTable("myTable");
DataColumn[] key = new DataColumn[4];
key[0] = new DataColumn("Company", typeof(string));
key[1] = new DataColumn("State", typeof(string));
key[2] = new DataColumn("Type", typeof(string));
key[3] = new DataColumn("Number", typeof(int));
myTable.Add(key[0]);
myTable.Add(key[1]);
myTable.Add(key[2]);
myTable.Add(key[3]);
myTable.Add(new DataColumn("Column6", typeof(string)));
myTable.Add(new DataColumn("Column7", typeof(string)));
myTable.Add(new DataColumn("Column8", typeof(string)));
myTable.Add(new DataColumn("Column9", typeof(string)));
myTable.Add(new DataColumn("Column10", typeof(string)));
myTable.PrimaryKey = key;

您可以使用 DataTables 做更多的事情,但这只是设置它所需的基础知识。此外,您提到 HashTables 只能有一个键,但是您可以使用 Tuple 作为键来连接多个值,例如:

var myHashTable = new HashSet<Tuple<string,string,string,int>, object>();
//Create a key
var key1 = Tuple.Create<string,string,string,int>("blah INC", "NY", "blah", 15);
myHashTable.Add(key1, myObject);