0

私は次のように定義されたエンティティがあります。Azure Mobile App:自己参照外部キーからのid列の参照方法

public class GoalItem : EntityData 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    public string Title { get; set; } 

    public string Description { get; set; } 

    public DateTime DueDate { get; set; } 

    public bool Complete { get; set; } 

    [ForeignKey("ParentGoal")] 
    public int ParentGoalId { get; set; } 

    [InverseProperty("SubGoals")] 
    public GoalItem ParentGoal { get; set; } 

    public List<GoalItem> SubGoals { get; set; } 
} 

を私はしかし、このエンティティを使用してAzureの中に自分のデータベースを作成することができています、私は私のエンティティにアクセスしようとしたとき、私は次のエラーを取得する:

{"message":"The query specified in the URI is not valid. Property 'Id' is of an unrecognized EdmPropertyKind."}

Azure Mobile Appsが小文字のIDを持つテーブルを必要とすることが判明しましたが、自分のIDを小文字に変更すると、ParentGoalId外部キーがGoalItemのIdプロパティを検索するため自己参照が機能しませんタイプが一致しないため、データベースのマイグレーションに失敗します。誰もIdの代わりにidプロパティを参照するParentGoalIdを取得する方法を知っていますか?

非常に高く評価されました!

答えて

0

I did some reading and found that Azure Mobile Apps require a table with lowercase id, however, if I change my Id to be lowercase the self referencing doesn't work because the ParentGoalId foreign key looks for the Id property of the GoalItem and the types don't match so my database migration fails. Does anyone know how to get ParentGoalId to reference the id propert instead of Id?

ForeignKey ParentGoalIdのタイプをintに設定し、EntityDataのIDを非表示に設定しています。

私が知る限り、EntityDataのIDタイプは文字列です。したがって、モバイルライブラリは、文字列タイプでデータベースにクエリを実行します。しかし、のintと置き換えると、 "URIで指定されたクエリが無効です。プロパティ 'Id'が認識できないEdmPropertyKindのエラーです。

エンティティデータクラス:

enter image description here

私はあなたがint型とその型の文字列を置換することによって、IDを隠さないのForeignKeyとしてエンティティデータクラスの主キーIDを使用しようとすることができ示唆しています。

以下のようにコード:私はまた、それをテストするためのデモを作成

public class GoalItem : EntityData 
{ 
    //[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    //public int Id { get; set; } 

    public string Title { get; set; } 

    public string Description { get; set; } 

    public DateTime DueDate { get; set; } 

    public bool Complete { get; set; } 

    [ForeignKey("ParentGoal")] 
    public string ParentGoalId { get; set; } 

    [InverseProperty("SubGoals")] 
    public GoalItem ParentGoal { get; set; } 

    public List<GoalItem> SubGoals { get; set; } 
} 

、以下のように結果:

enter image description here

+0

http://goaliebackend.azurewebsites.net/tables/ GoalItem?ZUMO-API-VERSION = 2.0.0 コードを変更してデータベースを推奨し、再デプロイしたときに、他のアイデアを変更しても、まだエラーが発生していますか?また、MobileServiceClientを使用してそのテーブルの項目を取得しようとすると、エラーは発生しませんが、無期限にハングします – TripWire

+0

あなたの説明によると、SSMSを使用してSQLサーバーにログインし、IDのタイプを確認してください。 。ここでもテストデモを作成します。データを取得できることがわかります。リンク:http://brandotestmobile.azurewebsites.net/tables/GoalItem?ZUMO-API-VERSION = 2.0.0 –