gpt4 book ai didi

c# - C# 中的复杂类层次结构

转载 作者:太空宇宙 更新时间:2023-11-03 19:54:50 25 4
gpt4 key购买 nike

我必须创建包含 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 列表中。

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

附言。对不起我糟糕的英语!

最佳答案

在多个地方存储数据然后尝试同步它们是计算机科学中的两个难题之一(命名、差一错误和缓存失效)。

除非您需要 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); }
}
}

关于c# - C# 中的复杂类层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34884204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com