【问题标题】:How to mock a database table structure in my C# code如何在我的 C# 代码中模拟数据库表结构
【发布时间】:2016-11-15 15:39:14
【问题描述】:

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

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

例如 公司、州、类型、编号(我将为其设置值),然后是第 5 列、第 6 列、第 7 列、第 8 列、第 9 列、第 10 列,然后我将为其提取值。

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

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

【问题讨论】:

  • 只需使用类似于存储库模式的东西,它会返回虚拟数据,直到您拥有数据库。您的数据库结构应该独立于您的对象模型。
  • DBA 不编写代码,他们管理数据库:O

标签: c# asp.net oracle mvp


【解决方案1】:

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

但是,如果您实际上只是想模拟数据库表,则可以使用 DataSetDataTable 类,它们分别提供内存中数据库和表的数据结构。

创建表格就这么简单:

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);

【讨论】:

  • 这正是我要找的!!!非常感谢您的帮助。
【解决方案2】:

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

例如:

创建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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 2014-10-07
    • 2013-07-16
    • 2012-10-20
    相关资源
    最近更新 更多