Entity Framwork Code First: Как загрузить связанные объекты изнутри объекта - PullRequest
1 голос
/ 26 марта 2012

Скажем, у вас есть два класса, заказ и клиент:

public class Customer{
    public int CustomerId { get; set; }
    public string CustomerName { get; set; }
    public ICollection<Order> Orders { get; set; }
}

public class Order{
    public int OrderId{get; set;}
    public Customer OrderCustomer{get; set;}
}

Теперь я хотел бы добавить метод "CanBeDeleted" в мой класс Customer, который сообщает моей программе, можно ли удалить этого клиента.Я хочу убедиться, что клиент может быть удален только при отсутствии заказов:

public class Customer{
       public int CustomerId { get; set; }
       public string CustomerName { get; set; }
       public ICollection<Order> Orders { get; set; }

       [NotMapped]
       public bool CanBeDeleted {
           get {
               return Orders.Count() == 0;
           }
       }
   }

Конечно, проблема в том, что программа не знает, был ли клиент загружен с опцией включения длязаказы.

Как я могу убедиться в том, что из получателя "CanBeDeleted" загружены заказы / как я могу загрузить их без ссылки на DbContext?

1 Ответ

1 голос
/ 26 марта 2012

По умолчанию Entity Framework Code First будет лениво загружать связанные сущности при доступе к ним.

Однако ваши свойства, которые содержат связанные сущности, должны быть объявлены virtual, чего вы, похоже, не делаете.

Причина, по которой они должны быть объявлены virtual, заключается в том, что Entity Framework создает прокси-класс, который переопределяет вашу реализацию и внедряет код для загрузки связанных сущностей при первом доступе.

http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...