【发布时间】:2016-01-19 18:21:08
【问题描述】:
我必须创建包含 4 个类的类模型 - 数据库、模式、表和列,例如:
public class Database
{
public string Name { get; set; }
public List<Schema> Schemas { get; set; };
public List<Table> Tables { get; set; };
public List<Column> Columns { get; set; };
}
public class Schema
{
public string Name { get; set; }
public Database Database { get; set; }
public List<Table> Tables { get; set; };
}
public class Table
{
public string Name { get; set; }
public Schema Schema { get; set; }
public List<Column> Columns { get; set; };
}
public class Column
{
public string Name { get; set; }
public Schema Table { get; set; }
}
好吧,类层次结构很简单:Database->Schemas->Tables->Columns
如您所见,“表”和“列” - 数据库中的列表 - 类应该包含数据库中的所有表和所有列。
同步 Database.Tables - 列表和 Schema.Tables - 列表的更好方法是什么? Database.Columns 和 Table.Columns 列表呢? 应该可以将新表添加到 Database.Tables 并在相应的 Schema.Tables - 列表中查看新表。或者将新表添加到 Schema.Tables 并在 Database.Tables 列表中查看新表。
我可以将 Schema.Tables 属性定义为:
public List<Table> Tables
{
get { return Database.Tables.Where(p => p.Schema == this).ToList<Tables>(); }
}
但是如果我将新表添加到 Schema.Tables 中,它将不会出现在 Database.Tables 列表中。
解决这个问题的更好方法是什么?
PS。对不起我糟糕的英语!
【问题讨论】:
-
应该是
ReadOnlyCollections。 -
为什么不直接使用 Dataset 类型呢?它已经格式化为表格行和列。
-
解决这个问题的更好方法是什么? 老实说,更好的方法是从一开始就不制造这个问题。为什么您需要能够将表格添加到
Database或Schema并让它显示在其他地方?这似乎是一个会让你很多悲伤的设计。 -
例如,如果您向
Database添加一个表,它应该添加到哪个Schema?让Database公开Schema仅。让Schema公开Tableonly 并让Table公开Columnonly。如果要添加表格,则需要先获取所需的Schema并将其添加到那里。如果您真的想要,可以将AddTable(Table t, Schema s)方法添加到Database作为辅助方法,将表添加到架构或类似的东西。
标签: c# class hierarchy class-hierarchy