在MVC Web API中声明外键关系

时间:2014-02-09 23:13:07

标签: entity-framework entity-framework-4 ef-code-first

我无法在MVC WEB API中建立简单的外键关系。我很困惑它是如何工作的。经过几个小时试图让它发挥作用后,我现在很困惑。

我有3个模型类:Task,TaskSubtype和Account

Tasksubtype在创建时具有accountID和TaskSubtypeId:

public class Task
{

    public int id { get; set; }
    [Key]
    public Guid TaskId { get; set; }
    [ForeignKey("TaskSubType")]
    public  Guid TaskSubTypeId { get; set; }
    [ForeignKey("Account")]
    public  Guid UserId { get; set; }
}

 public class Account
    {   
        public int Id { get; set; }
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid UserId { get; set; }

    }

   public class TaskSubType
    {

        public int id { get; set; }
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid SubTaskID { get; set; }
        public String Name { get; set; }


    }

我做错了什么?

2 个答案:

答案 0 :(得分:1)

答案很清楚Here

但基本上是:比如说你有一个Order类,添加一个引用你模型中另一个类的属性,例如Customer应该足以让Entity Framework知道那里有一个关系:

public class Order
{
    public int ID { get; set; }

    // Some other properties

    // Foreign key to customer
    public virtual Customer Customer { get; set; }
}

答案 1 :(得分:0)

如果要将id用作记录标识符,请不要将GUID用于此目的(反之亦然)。 像这样(假设您使用的是EF Code First):

public class Task
{

    [Key]
    public int id { get; set; }

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

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

public class Account
{   
    [Key]
    public int Id { get; set; }

}

public class TaskSubType
{

    [Key]
    public int id { get; set; }
    public String Name { get; set; }

}

希望这有帮助