[英]Complex class hierarchies in C#
我必須創建將包含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。 對不起,我的英語不好!
將數據存儲在多個位置,然后嘗試使其同步是計算機科學中的兩個難題之一(命名,一次性錯誤和緩存失效)。
除非您需要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); }
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.