Это может помочь (это помогло мне, когда я не мог понять, как это работает):
Если бы у вас были такие классы:
class ClientModel
{
int ClientId;
string Name;
}
class OrderModel
{
int OrderId;
string Details;
int ClientId;
}
Тогда это было быпредставляют 2 таблицы в вашей базе данных, которые «не будут» связаны друг с другом через внешний ключ (они будут связаны через ClientId
в OrderModel
), и вы можете получить данные типа «GetAllOrdersWithSomeClientId» и «GetTheClientNameForSomeClientId»из базы данных.НО проблемы могут возникнуть, когда вы удалите Client
из базы данных.Потому что тогда все равно будет какое-то число Orders
, которое будет содержать ClientId
, которого больше нет в таблице Client
и которое приведет к аномалиям в вашей базе данных.
virtual List<OrderModel> Orders;
(в ClientModel
) и virtual ClienModel Client;
(в OrderModel
) необходимы для создания отношения ака.внешний ключ между таблицами ClientModel
и OrderModel
.
Есть одна вещь, в которой я до сих пор не уверен.Что является int ClientId;
в OrderModel
.Я предполагаю, что оно должно иметь то же имя, что и ClientId
в ClientModel
, чтобы структура сущности знала, к каким 2 атрибутам должен подключиться внешний ключ.Было бы неплохо, если бы кто-то мог объяснить это подробно.
Кроме того, поместите это в свой конструктор DbContext, если что-то не получится:
this.Configuration.ProxyCreationEnabled = false;
this.Configuration.LazyLoadingEnabled = false;