详细的解释在你链接的MSDN文章中...所以你基本上想要一个简单的解释:
复杂类型是一组存在于其自己的C#对象中的属性,但映射到已存在的表(包含它的实体的表)上的列,而不是拥有自己的表(需要键等).
想象一下,你想要数据库中的这个表:
Orders
----------
Id (bigint)
Name (varchar)
Street (varchar)
Region (varchar)
Country (varchar)
但是希望在C#实体中使用此 struct :
class Order
{
long Id;
string Name;
struct Address
{
string Street;
string Region;
string Country;
}
}
所以Address
将是一个复杂的类型:它不会在数据库中单独存在(不会有Addresses
个表)...它将仅作为Orders
表上的一组列存在.
正如@HenkHolterman在 comments 中指出的,具有复杂类型的值是具有单个C#实体,该实体可以用作其他包含实体的值(例如,在我的示例中,Supplier
实体中可以有一个Address
,但它将只映射为Suppliers
表中的一组列).它使处理复杂类型中的值变得容易.
缺点恰恰是:如果相同的Address
(或您使用的任何其他类型)可以在不同实体之间共享,您可能不得不在数据库中多次重复复杂类型值.
Select 使用复杂类型还是单独的实体取决于您和您的设计.