2016-07-06 5 views
10

私はAzure Mobile AppsでC#を勉強しようとしています。私は、私のAzure SQL DBにリンクするモデルを作成し、このようにDataObjectを作成しました:私は上記の公共int型のIDをコメントアウトAzure Mobile Appsのデータモデルに文字列IDがあるのはなぜですか?

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; } 

} 

お知らせ。それは私にクエリで重複列エラーを与えていた。

最後に、新しく作成したアカウントデータオブジェクトを使用してコントローラを作成しました。

私はアプリケーションを実行し、 "テーブル/アカウント"関数をヒットし、ゼロ行を返しました(ただし、データがあり、私はAzureモバイルアプリケーションで使用しているユーザーでクエリできます)。

私は、このように、モデルスキーマに気づい:

[ 
    { 
    "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 
    } 
] 

を私が構成されたモデルで参照の問題がいくつかあります(と列の一部がどこから来ている私は知らないが...)

最初に、idは2回、int(これは私のものでなければならない)とstringとしての別のIDとしてリストされ、どこから来たのかわかりません。

また、DBでは、oGuidはuniqueIdentifier型です。文字列ではありません。私はまだテストすることができないので、これは問題かもしれません。

次に、CreatedAt(datetime)、UpdatedAt(datetime)、Version(string)、およびDeleted(bit)を含む、私のDBに存在しない他の列があります。

私はその呼び出しからデータが戻ってこない理由/理由は、データの不一致があると考えています。

モデルにリストされている他の列をAPIテストに追加する必要がありますか?

また、特定のアカウントを読み込むために/ table/Account/3を呼び出そうとしましたが、行が返されません...モデルの不一致が予想されますが、それが問題かどうかはわかりませんそれを引き起こす何か他のものか?エラーや警告は表示されません。


更新

私がモデル第一およびアズールとどのように新しいコードをAzureでの既存のDBを添付することで何が起こっているかを考え出しました。私は、他の時間を節約することを期待してここに投稿します。これは本当に簡単だったはずです。私はDBを手で制御したいので、codefirst(まだ)のファンではありません...だから、これは私にはdbバックエンドで作業するのがずっと簡単です。

私はモデルの下でモデルを右クリックし、新しいエンティティデータモデルを右クリックし、azure db名とパスワードで追加して「ユーザー作成のプロファイル名」を付けて、新しいプロジェクト(Azure Mobile App)以下に使用される。この接続は、以下のようにweb.configで編集する必要があります。

その後、DataObjects(MS必須列なし)でテーブルのモデルを作成し、データオブジェクトからコントローラを作成する必要がありました。私はその後、ウェブを編集しなければならなかった。非実体DB接続文字列を設定し、設定:例:

<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"/> 

は最後に、MobileServiceContextに、私はAzureのSQLでテーブルにDataObjectのモデルをマッピングしなければならなかったし、デフォルトのMS_TableConnectionStringから使用する接続文字列を設定しますweb.configの接続文字列に追加します。

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

とOnModelCreating下()私が追加:アカウントは、私がデータオブジェクトで作成され、tblAccountはAzureDBのテーブル名であるモデル(クラス)だった

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

を。

+2

私はちょうどStackoverflowがトローラーのような地獄になっているのが好きです。オフトピックのために閉じる?本当に? 「本、ツール、ソフトウェアライブラリ、チュートリアル、その他のオフサイトリソースをお薦めするか、見つけようとする質問は、スタックオーバーフローの話題にはなりません。それを解決するためにこれまでのところ。私は本やリン​​クなどの勧告を探しているわけではありませんが、それは提供されたものです。問題はそれを解決するために何が行われたかについて非常にうまく説明されました。私はこのサイトでほぼ完了しています。 – DaBlue

+0

私は同意する、私はあなたをupvoted。 –

+1

これを使用した後の別のコメント。 ID列の型は "string"ではなく "uniqueidentifier"でなければなりません。 – DaBlue

答えて

6

EntityData抽象クラスは、追加のフィールドが含まれています - ( - 通常はGUID - グローバルに一意である必要があります文字列)

  • UpdatedAt(のDateTimeOffset - 自動的に維持モバイルオフラインでの同期のための5つのフィールド

    • Idがあります
    • CreateAt(DateTimeOffset - 読み取りを最適化するためにデータベースパーティションにキーとして使用されますが、それ以外の場合は使用されません)
    • バージョン(バイト[] - タイムスタンプ - 楽観的concurrenサイコ/競合解決)
    • 削除済み(ブール値 - レコードが削除されたときに他のクライアントを更新するために使用されます - ソフト削除と呼ばれます)。

    お客様のクライアントモデルでは、Deleted以外のすべてのフィールドが必要です(削除されたレコードのオフライン同期をクリアするためにMobile Apps SDKを使用して自動的に処理されます)。

    バックエンドまたはフロントエンドで使用されている言語はありません。しかし、ログは両方のケースで利用可能です - あなたはあなたのためだけなど、いくつかの参照を、それをオンに例外をキャプチャする必要があります。

  • +0

    これはバックエンドのためのC#です(これは現在作業中です)。私がDataObjectにCreatedAtを追加すると、それがオーバーライドされているという警告が表示されます。それが私の問題なのかどうかは分かりません。私は上記のリンクを見てみましょう。 – DaBlue

    +0

    それを通過するのに時間がかかるだろうが、リンクする価値のある第2のリンクのページだけでなく、それらの特定のDBフィールドについても概説している。https://shellmonger.com/2016/04/29/30 -days-of-zumo-v2-azure-mobile-apps-day-14-linking-existing-tables /ありがとうございました! – DaBlue

    +0

    これを読んで、私のDBを再設計してそれらのフィールドを組み込んでいます。私はいくつかのデータを挿入しましたが、まだテストで行を返していません。私は200の応答を得る。http:// localhost:8483/tables/Account/B3F5AD1A-3BA0-40BB-80C9-D2239D9762F8が内容なしで戻ってきます。これはちょうど在庫C#を使用しています。現時点でコントローラを生成する。私は設定されたユーザーでデータを直接照会することができます。 – DaBlue

    関連する問題