簡體   English   中英

C#中的復雜類層次結構

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM