2016-07-06 11 views
10

Pracuję na C# w Azure Mobile Apps próbując je poznać. I stworzył model, aby link do mojego Azure SQL DB, stworzył DataObject takiego:Dlaczego w modelu danych aplikacji Azure Mobile występuje identyfikator ciągu?

public class Account : EntityData 
{ 
    //public int id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string PhoneNumber { get; set; } 
    public string Password { get; set; } 
    public DateTime dtCreated { get; set; } 
    public Guid oGuid { get; set; } 

} 

Zauważ, że wykomentowane publicznej int id powyżej; dało mi zduplikowany błąd kolumny w zapytaniu.

Wreszcie utworzyłem kontroler za pomocą nowo utworzonego konta DataObject.

Więc uruchomiłem aplikację i kliknąłem funkcję "tabele/konto" i zwrócono zero wierszy (ale są dane i mogę zapytać o to z użytkownikiem, którego używam w aplikacji mobilnej lazur).

I wtedy zauważył schemat modelu jako to:

[ 
    { 
    "id": 0, 
    "FirstName": "string", 
    "LastName": "string", 
    "PhoneNumber": "string", 
    "Password": "string", 
    "dtCreated": "2016-07-06T17:45:47.114Z", 
    "oGuid": "string", 
    "Id": "string", 
    "Version": "string", 
    "CreatedAt": "2016-07-06T17:45:47.114Z", 
    "UpdatedAt": "2016-07-06T17:45:47.114Z", 
    "Deleted": true 
    } 
] 

Istnieje kilka kwestii widzę ze skonfigurowanym modelu (i nie wiem, gdzie niektóre kolumny pochodzą z ...)

Po pierwsze, id jest wymieniony dwa razy, raz jako int (który musi być mój) i inny id jako ciąg i nie mam pojęcia skąd to się wzięło.

Również w DB, oGuid jest typu uniqueIdentifier; nie ciąg. To może, ale nie musi być problem, ponieważ nie mogę jeszcze przetestować.

Następnie są inne kolumny, które po prostu nie istnieją w moim DB, w tym CreatedAt (datetime), UpdatedAt (datetime), wersja (ciąg) i usunięte (bit).

Myślę, że problem/powód, dla którego nie otrzymuję żadnych danych z tego połączenia, jest niezgodny z danymi.

Czy muszę dodać inne kolumny, które są wymienione w modelu w teście API?

Próbowałem również wywołać/table/Account/3, aby załadować określone konto i nie zwraca żadnych wierszy ... Zgaduję, że to niezgodność modelu, ale nie jestem pewien, czy to jest problem lub coś innego, co go powoduje? Nie widzę żadnych błędów ani ostrzeżeń.


Aktualizacja

zorientowali się, co się dzieje z modelem pierwszym i Azure i jak podłączyć istniejący DB w Azure do nowego kodu. Zamierzam opublikować to tutaj dla nadziei, że to oszczędza czas innych. To powinno być łatwiejsze. Nie jestem fanem codefirst (jeszcze), ponieważ lubię kontrolować DB ręcznie ... Dzięki temu łatwiej jest mi pracować z backendem db.

Najpierw utworzyłem nowy projekt (aplikacja mobilna Azure), następnie pod modelami Prawym przyciskiem myszy kliknąłem model i dodałem nowy model danych jednostki, a następnie dodałem nazwę azurej db, hasło i nadałem mu moją "nazwę profilu utworzonego przez użytkownika" jak używane poniżej. To połączenie należy edytować w pliku web.config, jak pokazano poniżej.

Następnie musiałem stworzyć model dla tabeli w DataObjects (bez wymaganych kolumn MS) i utworzyć kontroler poza obiektem danych. Potem musiałem edytować internet.config i ustawić zakaz jednostki DB ciąg połączenia: przykład:

<add name="[user created preset name]" providerName="System.Data.SqlClient" connectionString="Server=[Azuredb server connection];initial catalog=[DBName];persist security info=True;user id=[user];password=[pass];MultipleActiveResultSets=True"/> 

Wreszcie w MobileServiceContext musiałem mapować modelu DataObject do tabeli w Azure SQL i ustawić parametry połączenia do korzystania z domyślnego MS_TableConnectionString do łańcucha połączeń w pliku web.config.

private const string connectionStringName = "Name=[user created preset name]"; 

i pod OnModelCreating() I dodaje:

modelBuilder.Entity<Account>().ToTable("tblAccount"); 

przypadku stwierdzenia model (klasa) stworzyłem w DataObjects i tblAccount to nazwa tabeli w AzureDB.

+2

Po prostu uwielbiam, jak Stackoverflow staje się takim piekielnym miejscem dla trolli. Zamknij z powodu wyłączenia tematu? Naprawdę? "Pytania z prośbą o zalecenie lub znalezienie książki, narzędzia, biblioteki oprogramowania, samouczka lub innych zasobów poza terenem projektu są nie na temat Stack Overflow, ponieważ mają tendencję do przyciągania opinii i spamu. Zamiast tego opisz problem i to, co zostało zrobione do tej pory go rozwiązać. " Nie szukam zaleceń dotyczących książek, linków itp. Ale to właśnie zostało dostarczone. Pytanie zostało bardzo dobrze opisane, co zostało zrobione, aby go rozwiązać. Już prawie skończyłem z tą stroną. – DaBlue

+0

Zgadzam się, przegłosowałem ciebie. –

+1

Kolejny komentarz po pracy z tym. Kolumna ID powinna mieć typ "uniqueidentifier", a nie string. – DaBlue

Odpowiedz

6

EntityData abstrakcyjna klasa zawiera dodatkowe pola - istnieje pięć pól na Telefon synchronizacja offline

  • Id (ciąg - zwykle GUID - musi być unikalna w skali globalnej)
  • UpdatedAt (datetimeoffset - utrzymywana automatycznie poprzez wyzwalacz - służy do bieżących sync)
  • CreateAt (datetimeoffset - używany jako klucz do partycji bazy danych w celu optymalizacji czytania, ale niewykorzystane inaczej)
  • Version (bajt [] - datownik - służy do optymistycznych concurren cy/rozdzielczość konfliktu)
  • Usunięty (a Boolean - służy do aktualizacji innych klientów po usunięciu rekordu - tzw. soft delete).

Twój klient potrzebuje wszystkich tych dziedzinach w swoim modelu klient oprócz usuniętych (co nie jest chyba przeniesione na żądanie i jest przedmiotem automatycznie za pośrednictwem aplikacji mobilnych SDK dla wyczyszczenie synchronizacja offline usuniętych zapisów).

Nie powiedziałeś, jakie języki są używane w backendu lub interfejsie użytkownika. Jednakże rejestracja jest dostępny w obu przypadkach - po prostu trzeba go włączyć, przechwytywać wyjątki itd niektóre odniesienia dla Ciebie:

+0

To jest C# dla zaplecza (działa tylko teraz). Jeśli dodaję CreateAt w DataObject, otrzymam ostrzeżenie, że jest nadpisywane. Nie jestem pewien, czy to mój problem? Spojrzę na link powyżej. – DaBlue

+0

Jego przejście zajmie trochę czasu, ale znalazłem stronę na drugim linku, z którym warto się połączyć, a także nakreśla te konkretne pola DB: https://shellmonger.com/2016/04/29/30 -days-of-zumo-v2-azure-mobile-apps-day-14-linking-istniejące-tabele/Dzięki! – DaBlue

+0

Przeczytałem to i przeprojektowałem moją bazę danych, aby uwzględnić te pola. Wstawiłem trochę danych, ale to nie jest zwracanie wierszy podczas testowania. Otrzymuję odpowiedź 200.Nawet bezpośrednie połączenie z rekordem, o którym wiem, że istnieje w ten sposób: http: // localhost: 8483/tables/Account/B3F5AD1A-3BA0-40BB-80C9-D2239D9762F8 wraca bez zawartości ... To jest po prostu użycie C# Stock generuj kontroler w tej chwili. Mogę bezpośrednio przesłać dane do skonfigurowanego użytkownika. – DaBlue

Powiązane problemy