Azure移动应用程序:如何从自引用外键引用id列?

时间:2017-06-26 09:46:59

标签: c# entity-framework azure entity-framework-6 azure-mobile-services

我有一个如下定义的实体:

ideas

我可以使用此实体在Azure中创建我的数据库,但是,当我尝试访问我的实体时,我收到以下错误:

  

{" message":" URI中指定的查询无效。财产' Id'是一个无法识别的EdmPropertyKind。"}

我做了一些阅读,发现Azure移动应用程序需要一个小写id的表,但是,如果我将我的Id更改为小写,则自引用不起作用,因为ParentGoalId外键查找Id属性GoalItem和类型不匹配,因此我的数据库迁移失败。有谁知道如何让ParentGoalId引用id属性而不是Id?

非常感谢!

1 个答案:

答案 0 :(得分:0)

  

我做了一些阅读,发现Azure移动应用程序需要一个小写id的表,但是,如果我将我的Id更改为小写,则自引用不起作用,因为ParentGoalId外键查找Id属性GoalItem和类型不匹配,因此我的数据库迁移失败。有谁知道如何让ParentGoalId引用id属性而不是Id?

根据你的代码和描述,我发现你设置了ForeignKey ParentGoalId的类型为int并隐藏了EntityData的id。

据我所知,EntityData的id类型是 string 。因此移动库将通过字符串类型查询数据库。但是您使用 int 替换该属性,因此您得到" URI中指定的查询无效。财产' Id'是一个无法识别的EdmPropertyKind"错误。

实体数据类:

enter image description here

我建议你可以尝试使用实体数据类主键id,因为ForeignKey不会通过用int替换它的类型字符串来隐藏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