티스토리 뷰
애제를 이용해서 테스트를 진행하는데, 또 다른 문제가 발생했다.
서비스 프로젝트에서 사용한 테이블 클래스 명은 TodoItem
클라이언트 프로젝트에서 사용한 모델 클래스 명은 TodoItemM
이렇게 이름이 다른 경우 아래 셈플 코드대로 작업이 불가능하다.
todoTable = App.MobileService.GetTable<TodoItemM>();
TodoItemMs = await todoTable.ToCollectionAsync();
그래서 찾아본 것이 string으로 가지고 오는 방법인데..이 경우에는 사용 방법이 복잡해 질 것 같다.
var table = App.MobileService.GetTable("TodoItem");
var result = await table.ReadAsync("");
우훔..그래서 다시 구글링을 해서 아래 내용을 찾아냈다.
클래스 이름 위에 아래와 같은 attribute를 추가하면 클래스가 사용하는 테이블 이름을 변경할 수 있다고 한다.
[DataTable("TodoItem")]
public class TodoItemM : BindableBase
{...}
여기서 간단히 끝났으면 참 좋은데, 난 여기서 한가지 더 고민이 있었다.
DataTable은 Microsoft.WindowsAzure.MobileServices에 속한 attribute이다. 그런데, 내가 만들고 있는 프로젝트는 기본적으로 모든 모델을 PCL에 넣어 놓고 있는데, PCL에는 Azure Mobile Service용 Nuget package를 추가할 수 없다는 것이다.
처음에는 partial 클래스로 만들어서 사용해 볼려고 했지만, 실패했다. 그래서, Wrap클래스를 만들어서 사용하기로 했다.
최종 결과는 아래와 같다.
1. PCL project Model
namespace CrossPlatform.Universal.PCL.Models
{
public class TodoItemM : BindableBase
{
private string _text;
private bool _complete;
public string Id { get; set; }
[JsonProperty(PropertyName = "text")]
public string Text
{
get { return _text; }
set { SetProperty(ref _text, value); }
}
[JsonProperty(PropertyName = "complete")]
public bool Complete
{
get { return _complete; }
set { SetProperty(ref _complete, value); }
}
}
}
2. Universal shared project Model
namespace OneSearch.Universal.Models
{
[DataTable("TodoItem")]
public partial class TodoItemMWrap : TodoItemM
{
}
}
3. Universal shared project ViewModel
private IMobileServiceTable<TodoItemMWrap> _todoTable = App.MobileService.GetTable<TodoItemMWrap>();
private MobileServiceCollection<TodoItemMWrap, TodoItemMWrap> _todoItemMs;
public MobileServiceCollection<TodoItemMWrap, TodoItemMWrap> TodoItemMs
{
get { return _todoItemMs; }
set { this.RaiseAndSetIfChanged(ref _todoItemMs, value); }
}
private async void RefreshTodoItems()
{
MobileServiceInvalidOperationException exception = null;
try
{
TodoItemMs = await _todoTable.ToCollectionAsync();
}
catch (MobileServiceInvalidOperationException e)
{
exception = e;
}
if (exception != null)
{
await new MessageDialog(exception.Message, "Error loading items").ShowAsync();
}
}
'Azure' 카테고리의 다른 글
[Azure Mobile Service] Custom authorization server side & client side (0) | 2014.12.19 |
---|---|
[Azure Mobile Service] 사용자 인증 추가하기 (0) | 2014.12.18 |
[Azure Mobile Service] 에저 모바일 서비스 데이터 한번에 모두 불러오기 (0) | 2014.12.12 |
Azure Mobile Service errors (0) | 2014.11.30 |
Azure Mobile Service error - The database name ... is invalid (0) | 2014.11.26 |
- Total
- Today
- Yesterday
- MVVM
- #MVVM
- LINQ
- Behavior
- uno-platform
- .net
- WPF
- kiosk
- Microsoft
- Always Encrypted
- Bot Framework
- windows 11
- Visual Studio 2022
- C#
- PRISM
- #Windows Template Studio
- Windows 10
- #prism
- IOT
- Build 2016
- dotNETconf
- ef core
- uno platform
- .net 5.0
- Cross-platform
- XAML
- UWP
- #uwp
- ComboBox
- visual studio 2019
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |