Menu

[756088]: / FoxTunes.DB / DatabaseFactory.cs  Maximize  Restore  History

Download this file

83 lines (72 with data), 2.8 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#pragma warning disable 612, 618
using FoxDb;
using FoxDb.Interfaces;
using FoxTunes.Interfaces;
namespace FoxTunes
{
public abstract class DatabaseFactory : StandardFactory, IDatabaseFactory
{
public ICore Core { get; private set; }
public IConfig Config { get; private set; }
public override void InitializeComponent(ICore core)
{
this.Core = core;
base.InitializeComponent(core);
}
public bool Test()
{
using (var database = this.OnCreate())
{
return this.OnTest(database);
}
}
protected abstract bool OnTest(IDatabase database);
public void Initialize()
{
using (var database = this.OnCreate())
{
this.OnInitialize(database);
}
}
protected abstract void OnInitialize(IDatabase database);
public IDatabaseComponent Create()
{
var database = this.OnCreate();
if (this.Config != null)
{
this.Config.CopyTo(database.Config);
}
else
{
this.Config = database.Config;
this.Configure(database);
}
database.InitializeComponent(this.Core);
return database;
}
protected abstract IDatabaseComponent OnCreate();
protected virtual void Configure(IDatabase database)
{
database.Config.Table<PlaylistItem>().With(table =>
{
table.Relation(item => item.MetaDatas).With(relation =>
{
relation.Expression.Left = relation.Expression.Clone();
relation.Expression.Operator = relation.Expression.CreateOperator(QueryOperator.OrElse);
relation.Expression.Right = relation.CreateConstraint().With(constraint =>
{
constraint.Left = relation.CreateConstraint(
database.Config.Table<PlaylistItem>().Column("LibraryItem_Id"),
database.Config.Table<LibraryItem, MetaDataItem>().Column("LibraryItem_Id")
);
constraint.Operator = constraint.CreateOperator(QueryOperator.AndAlso);
constraint.Right = relation.CreateConstraint(
database.Config.Table<LibraryItem, MetaDataItem>().Column("MetaDataItem_Id"),
database.Config.Table<MetaDataItem>().Column("Id")
);
});
});
});
}
}
}