2015-03-20 5 views
0

я определяю две сущности, как в следующем, но странное поведение происходит:Entity Framework - Свойство не может быть сконфигурирован как свойства навигации

[Table("ClientTypes", Schema="dbo")] 
public ClientType { 
    [Key] 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

[Table("Clients", Schema="dbo")] 
public Client { 

    [Key] 
    public long Id { get; set; } 

    [ForeignKey("ClientTypeId")] 
    public int ClientTypeId { get; set; } 
    public virtual ClientType ClientType { get; set; } 
} 

Я получаю ClientTypeId свойство наполненную некоторого значения , но объект ClientType не заполнен ничем. Может кто-то помочь мне с этим?

Спасибо всем!

ответ

1

Атрибут ForeignKey, поскольку у вас есть это неправильное свойство.

Аннотации могут быть помещены в свойство внешнего ключа и указать соответствующее имя свойства навигации или помещено в свойство навигации и указать соответствующее имя внешнего ключа.

- source

[ForeignKey("ClientTypeId")] должны украсить public virtual ClientType ClientType вместо

или изменить его на [ForeignKey("ClientType")] и оставить его там, где он есть.

0

Вы с нетерпением загружаете стоимость?

var clients = context.Clients.Include("ClientType").ToList(); 
0

При выборе клиента вы должны Include типа клиента

Client cli = (from c in db Clients.Include("ClientType")//or the name of the property 
       select c).First(); 

Это переводит на левый и выбирает данные для клиента и ClientType. Если вы пропустите Include, EF выберет данные только для клиента при выполнении инструкции. Как сказал Майк, если контекст все еще доступен, свойство будет лениться при загрузке.

+0

Ваше последнее предложение не обязательно верно. ClientType является виртуальным на клиенте, поэтому, если контекст все еще доступен, он будет ленить загружать ClientType. –

+0

@MikeCole Да. Отредактировал ответ. –

Смежные вопросы