【问题标题】:Declare foreign keys relationship in MVC Web API在 MVC Web API 中声明外键关系
【发布时间】:2014-03-07 03:31:59
【问题描述】:

我无法在 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; }


    }

我做错了什么?

【问题讨论】:

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


    【解决方案1】:

    如果您想使用 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; }
    
    }
    

    希望对你有帮助

    【讨论】:

    • 为什么不使用 guid 来达到这个目的?
    • 因为你已经使用了一个标识符,你在你的班级中称之为 id 。据我了解,Code First 约定将这样的列(其名称为 id)视为标识符。如果您想使用 GUID 也可以,但请删除 id 列。想想看;为什么列 id 不是标识符时要命名它?
    【解决方案2】:

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

    【讨论】:

    • 这肯定会起作用,但问题是我想要一个可以引用帐户的 Guid。我遇到的问题是我只收到从前端发回的 Guid,所以这种方法不起作用,因为 MVC 中的 ModelState.IsValid 将始终返回 false,因为对象不是 GUID。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 2011-07-18
    • 2011-07-29
    • 1970-01-01
    相关资源
    最近更新 更多