Ваш последний комментарий прояснил ваш вопрос:
Создать каждый не сложно, я просто не понимаю, как заставить отношения работать с 1 .. * или 1..1.Если я создаю Заказ, я всегда могу создать другой заказ
Итак, давайте поговорим о типах отношений.
Типы отношений
Типы отношений не говорят об абсолютном количестве объектов в системе.Они просто говорят о количестве сущностей в отношении к другим сущностям.
1: 1 Отношение
Это означает, что должны существовать два типа сущностейв парах.Если существует один объект типа A, то может существовать только один объект типа B.Например, ваши User
и Order
.Ордер не может существовать без User
, а у User
может быть только один Order
.Это не значит, что есть только один User
- , может быть 42 пользователя .Это просто означает, что если существует Order
, User
также должен существовать, и что User
может иметь только один Order
.
Существует строгая и менее строгая версия этого.Технически, я только что описал что-то вроде отношения 1: {0 или 1}.В реальных отношениях 1: 1 вы бы потребовали , чтобы существовал Order
, если существует User
.Ни один из них не может существовать, если другой не существует.Однако это ограничение обычно смягчается, когда речь идет о реляционных базах данных (но только в одном направлении - в этом случае у вас все еще не может быть Order
без User
).
Вы можете смоделировать это отношение с помощьюкод такой:
public class User
{
public Order Order { get; set; }
}
public class Order
{
// You could put a reference here back to the User if you want...
}
Обратите внимание, что немного странно поддерживать только один Order
для User
.Имеет смысл сделать это 1:*
.Но если это требование вашего задания, то вы должны его смоделировать.
1: * Отношения
Это похоже на 1: 1отношения.Но это ослабляет некоторые ограничения, так что если сущность типа A существует, то может существовать любое число (включая ноль) типа B.Примером являются Order
и OrderLine
.Опять же, нет никаких ограничений на количество сущностей любого типа. В системе может быть 57 заказов .Вы просто не можете иметь OrderLine
без Order
, и может быть несколько OrderLine
с на Order
.
. Вы можете смоделировать это отношение с помощью кода, подобного следующему:
public class Order
{
public List<OrderLine> OrderLines { get; set; }
}
public class OrderLine
{
// You could put a reference here back to the Order if you want...
}
Включение реляционных понятий в код
Я не могу говорить о вашем назначении, поэтому убедитесь, что вы подтверждаете то, что я здесь говорю, в соответствии с требованиями вашего назначения.
Не пытайтесь применять базовые реляционные понятия, подобные этим, в коде.База данных лучше справляется с этим, имеет лучший (декларативный) язык для описания взаимосвязей и станет вашим основным источником данных для системы.
Вместо этого вам просто нужно создать мягкую модель, которая следует заотношения (как это делают примеры кода выше), и пусть база данных выполняет реальную политику этих ограничений.
Примеры:
- Вы не должны пытаться ограничивать построение
Order
вводит код в код, и вам не нужно требовать User
для создания Order
(как сущности кода). - Для создания
OrderLine
вам не нужно требовать Order
для существования(как сущности кода).
Попытка ввести такие ограничения в коде ничего не дает.Когда вы сохраняете сущности в базе данных, база данных обеспечит эти отношения для вас (при условии, что вы настроили ее правильно, что вы научитесь делать).Ваша ошибка будет обнаружена, и вы выучите привычки, которые очень быстро избегают ошибок такого типа.
Попытка ввести такие ограничения в коде вредит вам.Написание вашей программы будет сложнее, а написание кода для вашего кода будет сложнее.
Например, рассмотрим алгоритм или тест, который сравнивает значения OrderLine
.Может быть, вы хотите сравнить его с гипотетическим OrderLine
.Если бы в вашем коде были реляционные ограничения, вам также пришлось бы создать гипотетические Order
и User
.Не могли бы вы также сравнить гипотетические User
и Order
с реальными?Что если вашему алгоритму не важно, из каких User
или Order
он возник?Если вы не собираетесь сравнивать их, зачем создавать их для начала?
Итак: не беспокойтесь об этом.Мягко смоделируйте ваши отношения, чтобы было легко перемещаться между вашими объектами, и позвольте базе данных выполнить ваши строгие проверки отношений для вас.