У меня есть вопрос, касающийся того, как Entity Framework хранит отношения между объектами в SQL Server Express 2008, так как сейчас я в замешательстве.
Я работаю над приложением WPF / MVVM, используя EF.Для простоты я приведу пример.
Допустим, у меня есть две таблицы в SQL Server, Customer
и Orders
.У Customer
есть первичный ключ ID
(uniqueidentifier
), а у Orders
тоже есть.Теперь Orders
также имеет столбец с именем CustomerId
(uniqueidentifier
), в котором я определяю отношение к столбцу Customer.ID
.
Эти таблицы сопоставляются с объектами Entity Framework Customer
и Order
.
. То, что я обычно делаю при создании нового Order
, будет следующим:
Order newOrder = Context.CreateObject<Order>();
newOrder.Id = Guid.NewGuid();
newOrder.CustomerId = customer.Id;
В этом случае в базе данных (после сохранения контекста) все столбцы в Orders
заполнены данными.
Теперь на этот раз я сделал это:
Order newOrder = Context.CreateObject<Order>();
newOrder.Id = Guid.NewGuid();
newOrder.Customer = customer; //so I'm assigning the Customer object to the relationship, not the ID
При выполнениитаким образом, я также ожидал бы, что в базе данных после сохранения контекста столбец Orders.CustomerId
будет иметь значение (GUID Customer
).Однако в моем случае это не так.Однако, когда я перемещаюсь по коллекции Customers
в моем приложении WPF, все Orders
появляются под правом Customer
.(Я перезагружал приложение несколько раз, поэтому контекст создавался заново).Также проверено на другой машине.Так что кеша не существует.
Так что мне было интересно, как EF может узнать, к какому Order
принадлежит Customer
, даже если база данных не содержит необходимой информации внутри столбцов своей таблицы?Или в каком-то другом месте эта информация хранится автоматически?
Я сейчас очень сильно растерялся.