C#中的复杂类层次结构

Dim*_*kin 1 c# class hierarchy class-hierarchy

我必须创建包含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; }
}
Run Code Online (Sandbox Code Playgroud)

那么,类层次结构非常简单:Database-> Schemas-> Tables-> Columns

正如您所看到的,"表"和"列" - 数据库中的列表 - 应包含数据库中的所有表和所有列.

同步Database.Tables - list和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>(); }
    }
Run Code Online (Sandbox Code Playgroud)

但是,如果我将新表添加到Schema.Tables,它将不会出现在Database.Tables列表中.

解决这个问题的更好方法是什么?

PS.对不起我糟糕的英语!

Ale*_*kov 5

将数据存储在多个位置然后尝试同步它们是计算机科学中的两个难题之一(命名,逐个错误和缓存失效).

除非您需要实际列表,否则Database只需枚举它们:

public class Database
{
    public string Name { get; set; }

    public List<Schema> Schemas { get; };

    public IEnumerable<Table> Tables 
    { 
         get { return Schemas.SelectMany(s=>s.Tables); }
    }

    public IEnumerable<Column> Columns 
    { 
      get { return Tables.SelectMany(t=>t.Columns); }
    }
}
Run Code Online (Sandbox Code Playgroud)