我试着阅读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相关问答推荐

如何在 ASP.NET RadioButtonList 中的项目之间添加空格

我可以强制刷新我的样式表文件吗?

如何在现有数据库中创建 ASP.Net Identity 表?

log4net 记录所有未处理的应用程序错误

Window.Open 使用 PDF 流而不是 PDF 位置

使用 IIS 的 ASP.NET 调试超时

在 RedirectToAction 调用中传播 QueryString 参数

ASP.NET Web 应用程序消息框

排序下拉列表? - C#,ASP.NET

Ef core:执行 MaxAsync 时序列不包含任何元素

反序列化客户端 AJAX JSON 日期

错误:无法在 Web 服务器上开始调试... ASP.NET 4.0

如何在 ASP.NET 中获取原始请求正文?

如何忽略身份框架的魔力,只使用 OWIN 身份验证中间件来获取我寻求的声明?

Html.RenderAction 和 Html.Action 的区别

为什么 HttpWebRequest 会抛出异常而不是返回 HttpStatusCode.NotFound?

Twitter Bootstrap 和 ASP.NET GridView

ASP.NET 核心,更改未经授权的默认重定向

在 ASP.NET Web API 2 中禁用 *all* 异常处理(为我自己腾出空间)?

Appdomain 回收究竟是什么