2013-05-18 4 views
0

Сначала я начал образец проекта с кодом и получил значение NULL от сущности, которая имеет ограничение внешнего ключа.код сначала получить значения из ограничения внешнего ключа

моя модель:

public class CustomerItem 
{ 
    [Key] 
    public int Id { get; set; } 
    public int Name{get;set;} 
    public virtual IEnumerable<OrderItem> Order { get; set; } 
} 

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

    [ForeignKey("CustomerItem")] 
    public int CustomerId { get; set; } 
    public virtual CustomerItem CustomerItem { get; set; } 
} 

DATAACCESS LINQ запрос для получения значения:

public IEnumerable<CustomerItem> GetOrdersFromCustomerItem(int id) 
{ 
    return (from c in this.dax.Customer 
      where c.Id.CompareTo(id) == 0 
      select c).AsEnumerable().ToList(); 
} 

этот запрос возвращал NULL заказов, так что я думаю, что есть какая-то ошибка в этом запросе. Как я могу подключить этот объект к таблице внешних ключей?

Благодаря

Обновлено мой запрос, чтобы получить все клиенты (и заказы) к этому:

public IEnumerable<CustomerItem> GetAllCustomers() 
{ 
    return (from c in this.dax.Customer 
      select new 
      { 
       //Properties 
       OrderItem = c.OrderItem 
      }).AsEnumerable.ToList().select(s => new CustomerItem 
      { 
       //Properties 
       OrderItem = s.OrderItem, //here I got the exception I wrote in comment 
      }).ToList(); 
} 

ответ

2

Изменение:

public virtual IEnumerable<OrderItem> Order { get; set; } 

To:

public virtual ICollection<OrderItem> Order { get; set; } 

Так как IEnumerable<> разоблачением только для чтения методов, Entity Framework в основном игнорируют его. свойство должно иметь тип записи для записи, чтобы сопоставить его с базой данных.

Это довольно часто, хотя, чтобы разоблачить IEnumerable собственности, и есть это getter возвращающую backing-field, который действительно IList/ICollection.

+0

ой, нашел решение в то же время. Я удалю свой ответ. Спасибо за вашу помощь. – nukleos

0

Вы должны изменить следующее:

public IEnumerable<CustomerItem> GetOrdersFromCustomerItem(int id) 
{ 
    // You must select CustomerItem not a customer in the previous linq query. 
    return (from c in this.dax.Customer 
     where c.Id.CompareTo(id) == 0 
     select new CustomerItem{ 

     }).AsEnumerable().ToList(); 
} 
+1

привет minhcat, спасибо за ваш ответ, но он по-прежнему не работает после некоторых изменений. Я обновил свой вопрос с помощью моего нового запроса и получил это исключение. «Указанный член типа не поддерживается в LINQ to Entities». Я нашел несколько сообщений об этом исключении: http://stackoverflow.com/questions/9018135/specified-type-member-not-supported-in-linq-to -entities, но я думаю, что типы, которые я использую должен быть известен linq-to-entity. – nukleos

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