Как настроить отношение внешнего ключа в codefirst без использования свойства навигации? - PullRequest
2 голосов
/ 18 августа 2011

Скажем, у вас есть класс заказа со статусом заказа, я хочу объявить OrderStatusId внутри класса OrderStatus.Тем не менее, связь с внешним ключом не устанавливается по умолчанию.Если я использую атрибут [ForeignKey] в столбце, то, похоже, мне потребуется свойство навигации, которое мне не нужно, поскольку это будет означать необходимость выполнения соединений со свойством навигации во всех моих запросах только для проверки состояния.

Как мне сделать это в EF codefirst?Определите свойство как внешний ключ без использования свойства навигации.

public class Order
{
  public int OrderId;

  public int OrderStatusId;
  // properties...
}

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

Ответы [ 2 ]

4 голосов
/ 18 августа 2011

Вам всегда нужно свойство навигации на хотя бы на одной стороне , чтобы построить отношение.Если у вас нет навигационных свойств, вам не с чем связать свой внешний ключ, и он останется общим столбцом.

0 голосов
/ 19 августа 2011

Вместо этого создайте свою модель

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 создаст ваши внешние ключи самостоятельно, используя ваши свойства навигации нет причин показывать их модели, так как в этом нет необходимости, при необходимости вы можете получить доступ к идентификатору, используя свойства навигации

...