如何:查询复杂类型(实体框架)
本主题演示如何执行返回包含复杂类型属性的实体类型对象的查询。 有关复杂类型的更多信息,请参见复杂类型对象(实体框架)和How to: Create and Modify Complex Types。
将 AdventureWorks 销售模型添加到您的项目并将项目配置为使用实体框架 。 有关更多信息,请参见如何:使用实体数据模型向导(实体框架)。
在应用程序的代码页中,添加以下 using 语句(在 Visual Basic 中为 Imports):
Imports System Imports System.Collections.Generic Imports System.Collections Imports System.Data.Common Imports System.Data Imports System.IO Imports System.Data.SqlClient Imports System.Data.EntityClient Imports System.Data.Metadata.Edm
using System; using System.Collections.Generic; using System.Collections; using System.Data.Common; using System.Data; using System.IO; using System.Data.SqlClient; using System.Data.EntityClient; using System.Data.Metadata.Edm;
双击 .edmx 文件可在实体设计器的模型浏览器窗口中显示模型。
在实体设计器图面上,选择 Contact 实体类型的 Email 和 Phone 属性,然后右击并选择**“重构为新的复杂类型”**。 具有选定 Email 和 Phone 属性的新复杂类型将添加到模型浏览器。
将新类型重命名为 EmailPhone。 将 Contact 实体类型中的属性重命名为 EmailPhoneComplexType.
有关使用“实体数据模型向导”创建和修改复杂类型的信息,请参见How to: Refactor Existing Properties into a Complex Type Property (Entity Data Model Tools)和How to: Create and Modify Complex Types。
下面的示例执行返回 Contacts
的集合的查询。 Contact
类型包含一个复杂类型属性 EmailPhoneComplexProperty
,该属性包含 EmailAddress
属性和 Phone
属性。 本示例输出 ContactID
属性和 EmailPhoneComplexType
复杂类型的值。
Using context As New AdventureWorksEntities()
Dim contacts = From contact In context.Contacts _
Where contact.ContactID = 3 _
Select contact
For Each contact As Contact In contacts
Console.WriteLine("Contact Id: " & contact.ContactID)
Console.WriteLine("Contact's email: " & contact.EmailPhoneComplexProperty.EmailAddress)
Console.WriteLine("Contact's phone#: " & contact.EmailPhoneComplexProperty.Phone)
Next
End Using
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
var contacts =
from contact in context.Contacts
where contact.ContactID == 3
select contact;
foreach (Contact contact in contacts)
{
Console.WriteLine("Contact Id: " + contact.ContactID);
Console.WriteLine("Contact's email: " + contact.EmailPhoneComplexProperty.EmailAddress);
Console.WriteLine("Contact's phone#: " + contact.EmailPhoneComplexProperty.Phone);
}
}