如何在不使用导航属性的情况下首先在代码中设置外键关系?

时间:2011-08-18 09:06:27

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

假设您有一个订单状态的订单类,我想在OrderStatus类中声明OrderStatusId。但是,默认情况下不设置外键关系。如果我在列上使用[ForeignKey]属性,它似乎需要一个我不想要的导航属性,因为这意味着必须在我的所有查询中对导航属性执行连接只是为了检查状态。

如何在EF codefirst中完成此操作?在不使用导航属性的情况下将属性定义为外键。

public class Order
{
  public int OrderId;

  public int OrderStatusId;
  // properties...
}

public class OrderStatus
{
  public int OrderStatusId;
  public string Status;
}

2 个答案:

答案 0 :(得分:4)

您始终需要at least one side上的导航属性来建立关系。如果您没有导航属性,则无法绑定您的外键,它将保留为常用列。

答案 1 :(得分:0)

改为创建这样的模型

public class Customer 
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string StreetAddress { get; set; }
    //etc...

    //navigation properties 
    public virtual List<Order> Orders { get; set; }

}

public class Order 
{

    public int Id { get; set; }
    public string OrderStatus { get; set; }

    //navigation properties 
    public virtual Customer OrderedBy { get; set; }

    //etc..


}

EF将使用您的导航属性自行创建外键 没有理由将它们暴露给模型,因为没必要你可以使用导航属性

在必要时访问id