using System.Collections.Generic;
using System.Linq;
using Marr.Data.Mapping;
namespace Marr.Data.QGen
{
///
/// This class represents a View. A view can hold multiple tables (and their columns).
///
public class View : Table, IEnumerable
{
private string _viewName;
private Table[] _tables;
private Mapping.ColumnMapCollection _columns;
public View(string viewName, Table[] tables)
: base(tables[0].EntityType, JoinType.None)
{
_viewName = viewName;
_tables = tables;
}
public Table[] Tables
{
get { return _tables; }
}
public override string Name
{
get
{
return _viewName;
}
set
{
_viewName = value;
}
}
public override string Alias
{
get
{
return base.Alias;
}
set
{
base.Alias = value;
// Sync view tables
foreach (Table table in _tables)
{
table.Alias = value;
}
}
}
///
/// Gets all the columns from all the tables included in the view.
///
public override Mapping.ColumnMapCollection Columns
{
get
{
if (_columns == null)
{
var allColumns = _tables.SelectMany(t => t.Columns);
_columns = new ColumnMapCollection();
_columns.AddRange(allColumns);
}
return _columns;
}
}
public IEnumerator GetEnumerator()
{
foreach (Table table in _tables)
{
yield return table;
}
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}
}