forked from ThatRendle/Simple.Data
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDatabase.cs
More file actions
157 lines (133 loc) · 4.78 KB
/
Database.cs
File metadata and controls
157 lines (133 loc) · 4.78 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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
using System;
using System.Dynamic;
using System.Linq;
using System.Text;
using System.Threading;
namespace Simple.Data
{
using System.Configuration;
using System.Data;
using System.Diagnostics;
/// <summary>
/// The entry class for Simple.Data. Provides static methods for opening databases,
/// and implements runtime dynamic functionality for resolving database-level objects.
/// </summary>
public sealed partial class Database : DataStrategy
{
private static SimpleDataConfigurationSection _configuration;
private static readonly IDatabaseOpener DatabaseOpener;
private static IPluralizer _pluralizer;
private readonly Adapter _adapter;
private readonly DatabaseRunner _databaseRunner;
static Database()
{
DatabaseOpener = new DatabaseOpener();
LoadTraceLevelFromConfig();
}
private static void LoadTraceLevelFromConfig()
{
_configuration =
(SimpleDataConfigurationSection) ConfigurationManager.GetSection("simpleData/simpleDataConfiguration");
if (_configuration != null)
{
Trace.TraceWarning("SimpleDataConfiguration section is obsolete; use system.diagnostics switches instead.");
TraceLevel = _configuration.TraceLevel;
}
else
{
var traceSwitch = new TraceSwitch("Simple.Data", "", TraceLevel.Info.ToString());
TraceLevel = traceSwitch.Level;
}
}
/// <summary>
/// Initializes a new instance of the <see cref="Database"/> class.
/// </summary>
/// <param name="adapter">The adapter to use for data access.</param>
internal Database(Adapter adapter)
{
_adapter = adapter;
_databaseRunner = new DatabaseRunner(_adapter);
}
private Database(Database copy) : base(copy)
{
_adapter = copy._adapter;
_databaseRunner = copy._databaseRunner;
}
public override Adapter GetAdapter()
{
return _adapter;
}
public static IDatabaseOpener Opener
{
get { return DatabaseOpener; }
}
/// <summary>
/// Gets a default instance of the Database. This connects to an ADO.NET data source
/// specified in the 'Simple.Data.Properties.Settings.ConnectionString' config ConnectionStrings setting.
/// </summary>
/// <value>The default database.</value>
public static dynamic Default
{
get { return DatabaseOpener.OpenDefault(); }
}
public SimpleTransaction BeginTransaction()
{
return SimpleTransaction.Begin(this);
}
public SimpleTransaction BeginTransaction(string name)
{
return SimpleTransaction.Begin(this, name);
}
public SimpleTransaction BeginTransaction(IsolationLevel isolationLevel)
{
return SimpleTransaction.Begin(this, isolationLevel);
}
protected internal override bool ExecuteFunction(out object result, Commands.ExecuteFunctionCommand command)
{
return command.Execute(out result);
}
protected internal override DataStrategy GetDatabase()
{
return this;
}
public static IPluralizer GetPluralizer()
{
return _pluralizer;
}
public static void SetPluralizer(IPluralizer pluralizer)
{
_pluralizer = pluralizer;
Extensions.StringExtensions.SetPluralizer(pluralizer);
}
public static void ClearAdapterCache()
{
DatabaseOpener.ClearAdapterCache();
}
public static void UseMockAdapter(Adapter mockAdapter)
{
Data.DatabaseOpener.UseMockAdapter(mockAdapter);
}
public static void UseMockAdapter(Func<Adapter> mockAdapterCreator)
{
Data.DatabaseOpener.UseMockAdapter(mockAdapterCreator());
}
public static void StopUsingMockAdapter()
{
Data.DatabaseOpener.StopUsingMock();
}
private static TraceLevel? _traceLevel;
public static TraceLevel TraceLevel
{
get { return _traceLevel ?? _configuration.TraceLevel; }
set { _traceLevel = value; }
}
internal override RunStrategy Run
{
get { return _databaseRunner; }
}
protected internal override DataStrategy Clone()
{
return new Database(this);
}
}
}