我试着阅读msdn article中关于复杂类型的内容.但它并没有解释何时使用它.此外,网络上也没有关于复杂类型以及何时使用它们的全面解释.

推荐答案

详细的解释在你链接的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 使用复杂类型还是单独的实体取决于您和您的设计.

Asp.net相关问答推荐

IIS重写模块排除机器人但允许GoogleBot

AJAX返回未定义、失败

如何根据另一个下拉列表中的 Select 从下拉列表中删除一个值?

如何在运行时判断动态数据类型的类型?

IIS Request.UserHostAddress 返回 IPV6 (::1),即使禁用了 IPV6

用于 ASP.NET 的 System.Drawing 的替代品?

使用域用户的 SQL 连接字符串?

每月的每一天

为什么对 ASP.NET MVC 控制器的调用不执行 DelegatingHandler?

如何在 ASP.NET 下拉列表中添加选项组?

反序列化客户端 AJAX JSON 日期

Page.IsValid 是如何工作的?

ASP.NET IIS Web.config [内部服务器错误]

VS2017 无法加载文件或程序集 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 或其依赖项之一

具有自定义报告创建能力的最佳 ASP.NET 报告引擎

OWIN 和 Katana,为什么要将应用程序与服务器解耦?

HtmlAgilityPack Select 的子 node 不符合预期

有没有办法在没有异常类的情况下抛出自定义异常

使用 NLog 在 ASP.NET Web API 2.1 中进行全局异常处理?

如何使 URL 重写与 web.Release.config 转换一起工作?