如何在我的 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);
我需要创建一个新数据库 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);