Ответ 1
Длительное объяснение заключается в статье MSDN, которую вы связали... поэтому вы в основном хотите простое объяснение:
Комплексный тип - это набор свойств, которые существуют в его собственном объекте для С#, но сопоставляются с столбцами в уже существующей таблице (той, которая содержит сущность, которая ее содержит), вместо собственной таблицы (которая нужен ключ и т.д.).
Итак, представьте, что вы хотите эту таблицу в базе данных:
Orders
----------
Id (bigint)
Name (varchar)
Street (varchar)
Region (varchar)
Country (varchar)
Но хочу эту структуру в объектах С#:
class Order
{
long Id;
string Name;
struct Address
{
string Street;
string Region;
string Country;
}
}
Итак, Address
будет сложным типом: он не будет существовать сам по себе (в таблице не будет Addresses
) в базе данных... он будет существовать только как набор столбцов на Orders
.
Как отмечено @HenkHolterman в комментариях, значение наличия сложных типов имеет единственный объект С#, который может использоваться как значение для других содержащихся объектов (в моем примере вы могли бы иметь Address
в Supplier
, но он просто будет отображаться как набор столбцов в таблице Suppliers
). Это упрощает работу со значениями в сложном типе.
Недостаток заключается именно в том: вам может потребоваться многократно повторять значения сложного типа в базе данных, если происходит то, что один и тот же Address
(или любой другой тип, который вы используете) может быть разделен между разными объектами.
Если вы решите работать со сложными типами или отдельными сущностями, зависит от вас и вашего дизайна.