SampleSmart
1.0.0.0
SampleSmart 사용 방법을 보여 주는 예제 프로젝트입니다.
Toggle main menu visibility
로딩중...
검색중...
일치하는것 없음
PageDatabase.xaml.ViewModel.cs
이 파일의 문서화 페이지로 가기
1
using
System.Collections.ObjectModel;
2
using
System.IO;
3
using
Dreamine.Database.Abstractions;
4
using
Dreamine.Database.Abstractions.Mapping;
5
using
Dreamine.Database.MySql;
6
using
Dreamine.Database.Oracle;
7
using
Dreamine.Database.Sqlite;
8
using
Dreamine.Database.SqlServer;
9
using
Dreamine.MVVM.ViewModels;
10
11
namespace
SampleSmart.Pages.PageSub
;
12
21
public
sealed
class
PageDatabaseViewModel
: ViewModelBase
22
{
31
private
DatabaseSampleTabViewModel
?
_selectedProviderTab
;
32
41
public
PageDatabaseViewModel
()
42
{
43
var dataDirectory = Path.Combine(AppContext.BaseDirectory,
"Data"
);
44
Directory.CreateDirectory(dataDirectory);
45
46
var sqlitePath = Path.Combine(dataDirectory,
"SampleSmart.db"
);
47
48
ProviderTabs
=
49
[
50
new
DatabaseSampleTabViewModel
(
51
"SQLite"
,
52
$
"Data Source={sqlitePath}"
,
53
connectionString =>
new
SqliteDatabaseProvider(connectionString),
54
autoInitialize:
true
),
55
56
new
DatabaseSampleTabViewModel
(
57
"MySQL"
,
58
"Server=localhost;Port=3306;Database=dreamine_sample;User ID=root;Password=password;"
,
59
connectionString =>
new
MySqlDatabaseProvider(connectionString)),
60
61
new
DatabaseSampleTabViewModel
(
62
"Oracle"
,
63
"User Id=dreamine;Password=password;Data Source=localhost:1521/XEPDB1;"
,
64
connectionString =>
new
OracleDatabaseProvider(connectionString)),
65
66
new
DatabaseSampleTabViewModel
(
67
"MS SQL"
,
68
"Server=localhost;Database=dreamine_sample;User Id=sa;Password=password;TrustServerCertificate=True;"
,
69
connectionString =>
new
SqlServerDatabaseProvider(connectionString))
70
];
71
72
SelectedProviderTab
=
ProviderTabs
[0];
73
}
74
83
public
ObservableCollection<DatabaseSampleTabViewModel>
ProviderTabs
{
get
; }
84
93
public
DatabaseSampleTabViewModel
?
SelectedProviderTab
94
{
95
get
=>
_selectedProviderTab
;
96
set
=> SetProperty(ref
_selectedProviderTab
, value);
97
}
98
}
99
108
public
sealed
class
DatabaseSampleTabViewModel
: ViewModelBase
109
{
118
private
readonly Func<string, IDatabaseProvider>
_providerFactory
;
127
private
IDatabaseProvider?
_provider
;
136
private
SampleCustomer
?
_selectedCustomer
;
145
private
string
_connectionString
;
154
private
string
_nameInput
=
"Dreamine"
;
163
private
string
_roleInput
=
"Operator"
;
172
private
string
_statusMessage
=
"Not initialized."
;
173
214
public
DatabaseSampleTabViewModel
(
215
string
title,
216
string
connectionString,
217
Func<string, IDatabaseProvider> providerFactory,
218
bool
autoInitialize =
false
)
219
{
220
Title
= title;
221
_connectionString
= connectionString;
222
_providerFactory
= providerFactory;
223
224
if
(autoInitialize)
225
{
226
Initialize
();
227
}
228
}
229
238
public
string
Title
{
get
; }
239
248
public
ObservableCollection<SampleCustomer>
Customers
{
get
; } = [];
249
258
public
string
ConnectionString
259
{
260
get
=>
_connectionString
;
261
set
=> SetProperty(ref
_connectionString
, value);
262
}
263
272
public
SampleCustomer
?
SelectedCustomer
273
{
274
get
=>
_selectedCustomer
;
275
set
276
{
277
if
(!SetProperty(ref
_selectedCustomer
, value))
278
{
279
return
;
280
}
281
282
if
(value is
null
)
283
{
284
return
;
285
}
286
287
NameInput
= value.Name;
288
RoleInput
= value.Role;
289
}
290
}
291
300
public
string
NameInput
301
{
302
get
=>
_nameInput
;
303
set
=> SetProperty(ref
_nameInput
, value);
304
}
305
314
public
string
RoleInput
315
{
316
get
=>
_roleInput
;
317
set
=> SetProperty(ref
_roleInput
, value);
318
}
319
328
public
string
StatusMessage
329
{
330
get
=>
_statusMessage
;
331
set
=> SetProperty(ref
_statusMessage
, value);
332
}
333
342
public
RelayCommand
InitializeCommand
=>
new
(
Initialize
);
343
352
public
RelayCommand
AddCommand
=>
new
(
Add
);
353
362
public
RelayCommand
UpdateCommand
=>
new
(
Update
);
363
372
public
RelayCommand
DeleteCommand
=>
new
(
Delete
);
373
382
public
RelayCommand
RefreshCommand
=>
new
(
Refresh
);
383
392
private
void
Initialize
()
393
{
394
try
395
{
396
_provider
=
_providerFactory
(
ConnectionString
);
397
_provider
.EnsureDatabaseExists();
398
_provider
.CreateTable<
SampleCustomer
>();
399
400
AddSeedDataIfNeeded
();
401
Refresh
();
402
}
403
catch
(Exception ex)
404
{
405
StatusMessage
= $
"{Title} initialize failed: {ex.Message}"
;
406
}
407
}
408
417
private
void
Add
()
418
{
419
if
(!
TryGetProvider
(out var provider))
420
{
421
return
;
422
}
423
424
try
425
{
426
var name =
NormalizeInput
(
NameInput
,
"New customer"
);
427
var role =
NormalizeInput
(
RoleInput
,
"Viewer"
);
428
429
provider.Insert(
new
SampleCustomer
430
{
431
Name = name,
432
Role = role,
433
CreatedAt = DateTime.Now
434
});
435
436
StatusMessage
= $
"{Title}: added {name}."
;
437
Refresh
();
438
}
439
catch
(Exception ex)
440
{
441
StatusMessage
= $
"{Title} add failed: {ex.Message}"
;
442
}
443
}
444
453
private
void
Update
()
454
{
455
if
(!
TryGetProvider
(out var provider))
456
{
457
return
;
458
}
459
460
if
(
SelectedCustomer
is
null
)
461
{
462
StatusMessage
=
"Select a row to update."
;
463
return
;
464
}
465
466
try
467
{
468
SelectedCustomer.Name =
NormalizeInput
(
NameInput
,
SelectedCustomer
.Name);
469
SelectedCustomer.Role =
NormalizeInput
(
RoleInput
,
SelectedCustomer
.Role);
470
471
provider.Update(
SelectedCustomer
);
472
StatusMessage
= $
"{Title}: updated #{SelectedCustomer.Id}."
;
473
Refresh
();
474
}
475
catch
(Exception ex)
476
{
477
StatusMessage
= $
"{Title} update failed: {ex.Message}"
;
478
}
479
}
480
489
private
void
Delete
()
490
{
491
if
(!
TryGetProvider
(out var provider))
492
{
493
return
;
494
}
495
496
if
(
SelectedCustomer
is
null
)
497
{
498
StatusMessage
=
"Select a row to delete."
;
499
return
;
500
}
501
502
try
503
{
504
var deletedId =
SelectedCustomer
.Id;
505
provider.Delete(
SelectedCustomer
);
506
SelectedCustomer
=
null
;
507
StatusMessage
= $
"{Title}: deleted #{deletedId}."
;
508
Refresh
();
509
}
510
catch
(Exception ex)
511
{
512
StatusMessage
= $
"{Title} delete failed: {ex.Message}"
;
513
}
514
}
515
524
private
void
Refresh
()
525
{
526
if
(!
TryGetProvider
(out var provider))
527
{
528
return
;
529
}
530
531
try
532
{
533
var rows = provider
534
.Query<
SampleCustomer
>(
"SELECT Id, Name, Role, CreatedAt FROM SampleCustomers ORDER BY Id DESC"
)
535
.ToArray();
536
537
Customers
.Clear();
538
foreach
(var row
in
rows)
539
{
540
Customers
.Add(row);
541
}
542
543
StatusMessage
= $
"{Title}: loaded {Customers.Count} rows."
;
544
}
545
catch
(Exception ex)
546
{
547
StatusMessage
= $
"{Title} refresh failed: {ex.Message}"
;
548
}
549
}
550
559
private
void
AddSeedDataIfNeeded
()
560
{
561
if
(!
TryGetProvider
(out var provider))
562
{
563
return
;
564
}
565
566
var count = provider.ExecuteScalar<
long
>(
"SELECT COUNT(1) FROM SampleCustomers"
);
567
if
(count > 0)
568
{
569
return
;
570
}
571
572
provider.Insert(
new
SampleCustomer
573
{
574
Name =
"Minsu"
,
575
Role =
"Admin"
,
576
CreatedAt = DateTime.Now
577
});
578
579
provider.Insert(
new
SampleCustomer
580
{
581
Name =
"Sample Operator"
,
582
Role =
"Operator"
,
583
CreatedAt = DateTime.Now
584
});
585
}
586
611
private
bool
TryGetProvider
(out IDatabaseProvider provider)
612
{
613
if
(
_provider
is not
null
)
614
{
615
provider =
_provider
;
616
return
true
;
617
}
618
619
StatusMessage
= $
"{Title}: initialize the provider first."
;
620
provider =
null
!;
621
return
false
;
622
}
623
656
private
static
string
NormalizeInput
(
string
value,
string
fallback)
657
{
658
return
string
.IsNullOrWhiteSpace(value)
659
? fallback
660
: value.Trim();
661
}
662
}
663
672
[DatabaseTable(
"SampleCustomers"
)]
673
public
sealed
class
SampleCustomer
674
{
683
[DatabaseKey]
684
[DatabaseGenerated]
685
public
int
Id
{
get
;
set
; }
686
695
public
string
Name
{
get
;
set
; } =
string
.Empty;
696
705
public
string
Role
{
get
;
set
; } =
string
.Empty;
706
715
public
DateTime
CreatedAt
{
get
;
set
; }
716
}
SampleSmart.Pages.PageSub
Definition
CommunicationSampleRuntime.cs:21
SampleSmart.Pages.PageSub.PageDatabaseViewModel.PageDatabaseViewModel
PageDatabaseViewModel()
Definition
PageDatabase.xaml.ViewModel.cs:41
SampleSmart.Pages.PageSub.PageDatabaseViewModel._selectedProviderTab
DatabaseSampleTabViewModel? _selectedProviderTab
Definition
PageDatabase.xaml.ViewModel.cs:31
SampleSmart.Pages.PageSub.PageDatabaseViewModel.ProviderTabs
ObservableCollection< DatabaseSampleTabViewModel > ProviderTabs
Definition
PageDatabase.xaml.ViewModel.cs:83
SampleSmart.Pages.PageSub.PageDatabaseViewModel.SelectedProviderTab
DatabaseSampleTabViewModel? SelectedProviderTab
Definition
PageDatabase.xaml.ViewModel.cs:94
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel
Definition
PageDatabase.xaml.ViewModel.cs:109
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.InitializeCommand
RelayCommand InitializeCommand
Definition
PageDatabase.xaml.ViewModel.cs:342
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.AddCommand
RelayCommand AddCommand
Definition
PageDatabase.xaml.ViewModel.cs:352
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel._statusMessage
string _statusMessage
Definition
PageDatabase.xaml.ViewModel.cs:172
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.RoleInput
string RoleInput
Definition
PageDatabase.xaml.ViewModel.cs:315
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel._provider
IDatabaseProvider? _provider
Definition
PageDatabase.xaml.ViewModel.cs:127
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.ConnectionString
string ConnectionString
Definition
PageDatabase.xaml.ViewModel.cs:259
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.Refresh
void Refresh()
Definition
PageDatabase.xaml.ViewModel.cs:524
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.Title
string Title
Definition
PageDatabase.xaml.ViewModel.cs:238
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.UpdateCommand
RelayCommand UpdateCommand
Definition
PageDatabase.xaml.ViewModel.cs:362
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.SelectedCustomer
SampleCustomer? SelectedCustomer
Definition
PageDatabase.xaml.ViewModel.cs:273
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.AddSeedDataIfNeeded
void AddSeedDataIfNeeded()
Definition
PageDatabase.xaml.ViewModel.cs:559
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.RefreshCommand
RelayCommand RefreshCommand
Definition
PageDatabase.xaml.ViewModel.cs:382
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel._roleInput
string _roleInput
Definition
PageDatabase.xaml.ViewModel.cs:163
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.Add
void Add()
Definition
PageDatabase.xaml.ViewModel.cs:417
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.Delete
void Delete()
Definition
PageDatabase.xaml.ViewModel.cs:489
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.Initialize
void Initialize()
Definition
PageDatabase.xaml.ViewModel.cs:392
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.NormalizeInput
static string NormalizeInput(string value, string fallback)
Definition
PageDatabase.xaml.ViewModel.cs:656
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.DeleteCommand
RelayCommand DeleteCommand
Definition
PageDatabase.xaml.ViewModel.cs:372
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel._providerFactory
readonly Func< string, IDatabaseProvider > _providerFactory
Definition
PageDatabase.xaml.ViewModel.cs:118
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.DatabaseSampleTabViewModel
DatabaseSampleTabViewModel(string title, string connectionString, Func< string, IDatabaseProvider > providerFactory, bool autoInitialize=false)
Definition
PageDatabase.xaml.ViewModel.cs:214
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.TryGetProvider
bool TryGetProvider(out IDatabaseProvider provider)
Definition
PageDatabase.xaml.ViewModel.cs:611
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.NameInput
string NameInput
Definition
PageDatabase.xaml.ViewModel.cs:301
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.Customers
ObservableCollection< SampleCustomer > Customers
Definition
PageDatabase.xaml.ViewModel.cs:248
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel._connectionString
string _connectionString
Definition
PageDatabase.xaml.ViewModel.cs:145
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.Update
void Update()
Definition
PageDatabase.xaml.ViewModel.cs:453
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel._selectedCustomer
SampleCustomer? _selectedCustomer
Definition
PageDatabase.xaml.ViewModel.cs:136
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel.StatusMessage
string StatusMessage
Definition
PageDatabase.xaml.ViewModel.cs:329
SampleSmart.Pages.PageSub.DatabaseSampleTabViewModel._nameInput
string _nameInput
Definition
PageDatabase.xaml.ViewModel.cs:154
SampleSmart.Pages.PageSub.SampleCustomer
Definition
PageDatabase.xaml.ViewModel.cs:674
SampleSmart.Pages.PageSub.SampleCustomer.Id
int Id
Definition
PageDatabase.xaml.ViewModel.cs:685
SampleSmart.Pages.PageSub.SampleCustomer.Role
string Role
Definition
PageDatabase.xaml.ViewModel.cs:705
SampleSmart.Pages.PageSub.SampleCustomer.Name
string Name
Definition
PageDatabase.xaml.ViewModel.cs:695
SampleSmart.Pages.PageSub.SampleCustomer.CreatedAt
DateTime CreatedAt
Definition
PageDatabase.xaml.ViewModel.cs:715
Pages
PageSub
PageDatabase.xaml.ViewModel.cs
다음에 의해 생성됨 :
1.17.0