批注研究工具架构(EDM 示例应用程序)

此应用程序中实现的实体使用 实体数据模型 (EDM),并且在概念架构定义语言 (CSDL) 中声明和定义。三个实体用于包含有关 Web 引用、引用描述符和联系人的数据。需要使用第四个实体来包含用于将引用和联系人联系起来的标识符对。有关实体和关联的更多信息,请参见 EDM 规范

每个联系个人都可以与多个引用相关联,联系人和引用之间的关联必须实现为多对多关联。每个引用描述符都仅包含有关一个 Web 引用的数据,但可以将一个引用与多个引用描述符相关联;引用和引用描述符之间的关联被实现为多对一关联。

以下架构段包含 Reference 实体的声明。Key 属性被指定为 ReferenceID 属性。还有其他三个属性:DocumentTypeDocumentTextLocatorLocator 属性包含用于查找 Web 引用的 URL。尽管本示例中的应用程序代码未使用 DocumentTypeDocumentText,但它们是为其他使用 SQL Server 的全文搜索功能的实验提供的。有关架构的更多信息,请参见架构 (EDM)

一个名为 RefDescriptors 的导航属性在应用程序代码中提供了访问与 Reference 类型实例相关联的 ReferenceDescriptor 实体实例的快捷方式。有关导航属性的更多信息,请参见导航属性 (EDM)

  <EntityType Name="Reference">
    <Key>
      <PropertyRef Name="ReferenceID" />
    </Key>
    <Property Name="ReferenceID" Type="Guid" Nullable="false" />
    <Property Name="DocumentType" Type="String" MaxLength="8" />
    <Property Name="DocumentText" Type="String" MaxLength="4000" />
    <Property Name="Locator" Type="String" Nullable="false"
         MaxLength="500" />
    <NavigationProperty Name="RefDescriptors"
         Relationship="Self.ReferenceDescriptor_Reference"
         FromRole="Reference" ToRole="ReferenceDescriptor" />
  </EntityType>

以下架构段声明和定义了 ReferenceDescriptor 实体:

  <EntityType Name="ReferenceDescriptor">
    <Key>
      <PropertyRef Name="DescriptorID" />
    </Key>
    <Property Name="DescriptorID" Type="Guid" Nullable="false" />
    <Property Name="Annotation" Type="String" MaxLength="2000" />
    <Property Name="Keyword" Type="String" MaxLength="50" />
    <NavigationProperty Name="Reference"
          Relationship="Self.ReferenceDescriptor_Reference"
          FromRole="ReferenceDescriptor" ToRole="Reference" />
  </EntityType>

此实体包含一个 Annotation 属性和一个 Keyword 属性。可以使用其中一个或两个属性对 Web 页 Reference 进行分类和描述。这两个属性都可以为 Null,但应该为其中一个属性分配值。该应用程序中的用户界面可以分别验证这两个属性是否是必需的。

Reference 实体上的导航属性使用以下架构段中定义的 Association

  <Association Name="ReferenceDescriptor_Reference">
    <End Role="Reference" Type="ResearchCollaborationDataModel.Reference" Multiplicity="1" />
    <End Role="ReferenceDescriptor"
       Type="ResearchCollaborationDataModel.ReferenceDescriptor"
       Multiplicity="*" />
  </Association>

此关联中使用的 <End> 标记指示一对多关系中的 ReferenceReferenceDescriptor 实体。每个 Reference 都可以由任意数量的描述符加以描述。生成对象模型后,导航属性将像 RefDescriptor 实例集合那样工作。导航属性将生成为可编程数据模型中的 ObjectQuery

此关联中的 EndRole 定义是同义的。

多对多关联的实现

因为可以将任意数量的 References 与任意数量的 Contacts 相关联,所以必须将这些实体之间的关联实现为多对多关联。多对多关联要求在存储实现中有一个链接表,并且在概念架构和存储元数据中都有一个实体声明来表示该链接表。然后,就可以在链接实体以及 Contact 实体和 Reference 实体之间声明关联。

下面的使用 CSDL 编写的实体声明使用了数据库中的链接表。存储架构定义语言 (SSDL) 中的一个类似声明提供了有关链接表的元数据。

  <EntityType Name="ContactPersonReference">
    <Key>
      <PropertyRef Name="ContactPersonRefID" />
    </Key>
    <Property Name="ContactPersonRefID" Type="Guid" Nullable="false" />
      <NavigationProperty Name="RelatedReference"
          Relationship="Self.LinkTable_Reference"
          FromRole="ContactPersonReference" ToRole="Reference" />
      <NavigationProperty Name="RelatedContact"
          Relationship="Self.LinkTable_ContactPerson"
          FromRole="ContactPersonReference" ToRole="ContactPerson" />
  </EntityType>

实体 Key 是此架构中声明的唯一属性。导航属性表示相关 Reference 实例和相关 ContactPerson 实例的集合。在数据表中,有一些列包含 ReferenceIDContactPersonID GUID 对。

两个关联支持多对多关系:LinkTable_ReferenceLinkTable_ContactPerson。这些关联用以下语法定义:

  <AssociationSet Name="LinkTable_Reference"
      Association="ResearchCollaborationDataModel.LinkTable_Reference">
    <End Role="Reference" EntitySet="Reference" />
    <End Role="ContactPersonReference"
       EntitySet="ContactPersonReference" />
  </AssociationSet>

  <Association Name="LinkTable_ContactPerson">
    <End Role="ContactPerson" Type="ResearchCollaborationDataModel.ContactPerson" Multiplicity="1" />
    <End Role="ContactPersonReference"
       Type="ResearchCollaborationDataModel.ContactPersonReference"
       Multiplicity="*" />
  </Association>

上述每个关联都被定义为一对多关系,但链接实体上的导航属性将 Reference/ContactPerson 对集合联系起来。

完整的架构和映射规范

以下各节包含本示例使用的架构和映射规范。

概念架构 (CSDL)

该应用程序使用的实体和关联是用 CSDL 定义的。对象模型从此设计架构生成。

<?xml version="1.0" encoding="utf-8"?>
   <Schema Namespace="ResearchCollaborationDataModel" Alias="Self"
        xmlns="https://schemas.microsoft.com/ado/2006/04/edm">

  <EntityType Name="Reference">
    <Key>
      <PropertyRef Name="ReferenceID" />
    </Key>
    <Property Name="ReferenceID" Type="Guid" Nullable="false" />
    <Property Name="DocumentType" Type="String" />
    <Property Name="DocumentText" Type="String" />
    <Property Name="Locator" Type="String" Nullable="false" />
    <NavigationProperty Name="RefDescriptors"
 Relationship="Self.ReferenceDescriptor_Reference" FromRole="Reference"
 ToRole="ReferenceDescriptor" />
  </EntityType>

  <EntityType Name="ReferenceDescriptor">
    <Key>
      <PropertyRef Name="DescriptorID" />
    </Key>
    <Property Name="DescriptorID" Type="Guid" Nullable="false" />
    <Property Name="Annotation" Type="String" />
    <Property Name="Keyword" Type="String" />
    <NavigationProperty Name="Reference"
        Relationship="Self.ReferenceDescriptor_Reference"
        FromRole="ReferenceDescriptor" ToRole="Reference" />
  </EntityType>

  <EntityType Name="ContactPerson">
    <Key>
      <PropertyRef Name="ContactPersonID" />
    </Key>
    <Property Name="ContactPersonID" Type="Guid" Nullable="false" />
    <Property Name="LastName" Type="String" Nullable="false" />
    <Property Name="FirstName" Type="String" Nullable="false" />
    <Property Name="Title" Type="String" />
    <Property Name="Email" Type="String" Nullable="false" />
  </EntityType>

  <EntityType Name="ContactPersonReference">
    <Key>
      <PropertyRef Name="ContactPersonRefID" />
    </Key>
    <Property Name="ContactPersonRefID" Type="Guid" Nullable="false" />
      <NavigationProperty Name="RelatedReference" Relationship="Self.LinkTable_Reference"
            FromRole="ContactPersonReference" ToRole="Reference" />
      <NavigationProperty Name="RelatedContact" Relationship="Self.LinkTable_ContactPerson"
        FromRole="ContactPersonReference" ToRole="ContactPerson" />
  </EntityType>

  <Association Name="ReferenceDescriptor_Reference">
    <End Role="Reference" Type="ResearchCollaborationDataModel.Reference" Multiplicity="1" />
    <End Role="ReferenceDescriptor" Type="ResearchCollaborationDataModel.ReferenceDescriptor" Multiplicity="*" />
  </Association>

  <Association Name="LinkTable_ContactPerson">
    <End Role="ContactPerson" Type="ResearchCollaborationDataModel.ContactPerson" Multiplicity="1" />
    <End Role="ContactPersonReference" Type="ResearchCollaborationDataModel.ContactPersonReference" Multiplicity="*" />
  </Association>

  <Association Name="LinkTable_Reference">
    <End Role="Reference" Type="ResearchCollaborationDataModel.Reference" Multiplicity="1" />
    <End Role="ContactPersonReference"
 Type="ResearchCollaborationDataModel.ContactPersonReference"
 Multiplicity="*" />
  </Association>

  <EntityContainer Name="ResearchCollaborationData">
      
    <EntitySet Name="ContactPerson"
 EntityType="ResearchCollaborationDataModel.ContactPerson" />
    <EntitySet Name="ContactPersonReference"
 EntityType="ResearchCollaborationDataModel.ContactPersonReference" />
    <EntitySet Name="Reference" EntityType="ResearchCollaborationDataModel.Reference" />
    <EntitySet Name="ReferenceDescriptor"
 EntityType="ResearchCollaborationDataModel.ReferenceDescriptor" />
    
    <AssociationSet Name="LinkTable_ContactPerson"
 Association="ResearchCollaborationDataModel.LinkTable_ContactPerson">
      <End Role="ContactPerson" EntitySet="ContactPerson" />
      <End Role="ContactPersonReference"
           EntitySet="ContactPersonReference" />
    </AssociationSet>
    
    <AssociationSet Name="LinkTable_Reference"
 Association="ResearchCollaborationDataModel.LinkTable_Reference">
      <End Role="Reference" EntitySet="Reference" />
      <End Role="ContactPersonReference"
            EntitySet="ContactPersonReference" />
    </AssociationSet>
    
    <AssociationSet Name="ReferenceDescriptor_Reference"
 Association="ResearchCollaborationDataModel.ReferenceDescriptor_Reference">
      <End Role="Reference" EntitySet="Reference" />
      <End Role="ReferenceDescriptor" EntitySet="ReferenceDescriptor" />
    </AssociationSet>

  </EntityContainer>

</Schema>

存储元数据架构 (SSDL)

EDM 应用程序使用的存储结构中的元数据是使用 SSDL 定义的。

<?xml version="1.0" encoding="utf-8"?>
  <Schema Namespace="ResearchCollaborationDataTarget" Alias="Self"
      Provider="System.Data.SqlClient"
      ProviderManifestToken="2005"
      xmlns="https://schemas.microsoft.com/ado/2006/04/edm/ssdl">

  <EntityType Name="ContactPerson">
    <Key>
      <PropertyRef Name="ContactPersonID" />
    </Key>
    <Property Name="ContactPersonID" Type="uniqueidentifier"
         Nullable="false" />
    <Property Name="LastName" Type="nvarchar" Nullable="false"
         MaxLength="50" />
    <Property Name="FirstName" Type="nvarchar" Nullable="false"
         MaxLength="50" />
    <Property Name="Title" Type="nvarchar" MaxLength="50" />
    <Property Name="Email" Type="nvarchar" Nullable="false"
         MaxLength="50" />
  </EntityType>

  <EntityType Name="ContactPersonReference">
    <Key>
      <PropertyRef Name="ContactPersonRefID" />
    </Key>
    <Property Name="ContactPersonID" Type="uniqueidentifier"
          Nullable="false" />
    <Property Name="ReferenceID" Type="uniqueidentifier"
          Nullable="false" />
    <Property Name="ContactPersonRefID" Type="uniqueidentifier"
          Nullable="false" />
  </EntityType>

  <EntityType Name="Reference">
    <Key>
      <PropertyRef Name="ReferenceID" />
    </Key>
    <Property Name="ReferenceID" Type="uniqueidentifier"
         Nullable="false" />
    <Property Name="DocumentType" Type="nvarchar" MaxLength="8" />
    <Property Name="DocumentText" Type="nvarchar" MaxLength="4000" />
    <Property Name="Locator" Type="nvarchar" Nullable="false"
         MaxLength="500" />
  </EntityType>

  <EntityType Name="ReferenceDescriptor">
    <Key>
      <PropertyRef Name="DescriptorID" />
    </Key>
    <Property Name="DescriptorID" Type="uniqueidentifier"
           Nullable="false" />
    <Property Name="ReferenceID" Type="uniqueidentifier"
           Nullable="false" />
    <Property Name="Annotation" Type="nvarchar" MaxLength="2000" />
    <Property Name="Keyword" Type="nvarchar" MaxLength="50" />
  </EntityType>

  <Association Name="LinkTable_ContactPerson">
    <End Role="ContactPerson"
          Type="ResearchCollaborationDataTarget.ContactPerson" Multiplicity="1"/>
    <End Role="ContactPersonReference"
       Type="ResearchCollaborationDataTarget.ContactPersonReference"
       Multiplicity="*" />
    <ReferentialConstraint>
      <Principal Role="ContactPerson">
        <PropertyRef Name="ContactPersonID" />
      </Principal>
      <Dependent Role="ContactPersonReference">
        <PropertyRef Name="ContactPersonID" />
      </Dependent>
    </ReferentialConstraint>
  </Association>

  <Association Name="LinkTable_Reference">
    <End Role="Reference"
         Type="ResearchCollaborationDataTarget.Reference"
         Multiplicity="1" />
    <End Role="ContactPersonReference"
       Type="ResearchCollaborationDataTarget.ContactPersonReference"
       Multiplicity="*" />
    <ReferentialConstraint>
      <Principal Role="Reference">
        <PropertyRef Name="ReferenceID" />
      </Principal>
      <Dependent Role="ContactPersonReference">
        <PropertyRef Name="ReferenceID" />
      </Dependent>
    </ReferentialConstraint>
  </Association>

  <Association Name="ReferenceDescriptor_Reference">
    <End Role="Reference"
   Type="ResearchCollaborationDataTarget.Reference" Multiplicity="1" />
    <End Role="ReferenceDescriptor"
           Type="ResearchCollaborationDataTarget.ReferenceDescriptor"
           Multiplicity="*" />
    <ReferentialConstraint>
      <Principal Role="Reference">
        <PropertyRef Name="ReferenceID" />
      </Principal>
      <Dependent Role="ReferenceDescriptor">
        <PropertyRef Name="ReferenceID" />
      </Dependent>
    </ReferentialConstraint>
  </Association>

  <EntityContainer Name="dbo">
    <EntitySet Name="ContactPerson"
       EntityType="ResearchCollaborationDataTarget.ContactPerson" />
    <EntitySet Name="ContactPersonReference"
 EntityType="ResearchCollaborationDataTarget.ContactPersonReference"/>
    <EntitySet Name="Reference"
       EntityType="ResearchCollaborationDataTarget.Reference" />
    <EntitySet Name="ReferenceDescriptor"
   EntityType="ResearchCollaborationDataTarget.ReferenceDescriptor"/>

    <AssociationSet Name="LinkTable_ContactPerson"
  Association="ResearchCollaborationDataTarget.LinkTable_ContactPerson">
      <End Role="ContactPerson" EntitySet="ContactPerson" />
      <End Role="ContactPersonReference"
          EntitySet="ContactPersonReference" />
    </AssociationSet>
    <AssociationSet Name="LinkTable_Reference"
    Association="ResearchCollaborationDataTarget.LinkTable_Reference">
      <End Role="Reference" EntitySet="Reference" />
      <End Role="ContactPersonReference"
          EntitySet="ContactPersonReference" />
    </AssociationSet>

    <AssociationSet Name="ReferenceDescriptor_Reference"
 Association="ResearchCollaborationDataTarget.ReferenceDescriptor_Reference">
      <End Role="Reference" EntitySet="Reference" />
      <End Role="ReferenceDescriptor" EntitySet="ReferenceDescriptor" />
    </AssociationSet>
  </EntityContainer>

</Schema>

映射规范 (MSL)

CSDL 中定义的实体和关联被使用映射规范语言 (MSL) 映射到 SSDL 中的存储元数据。

<?xml version="1.0" encoding="utf-8"?>
<Mapping Space="C-S"
    xmlns:edm="urn:schemas-microsoft-com:windows:storage:mapping:CS"
    xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS">

  <edm:EntityContainerMapping
           CdmEntityContainer="ResearchCollaborationData"
           StorageEntityContainer="dbo">
    <edm:EntitySetMapping Name="ContactPerson">
      <edm:EntityTypeMapping
         TypeName="ResearchCollaborationDataModel.ContactPerson">
        <edm:MappingFragment StoreEntitySet="ContactPerson">
          <edm:ScalarProperty Name="ContactPersonID"
               ColumnName="ContactPersonID" />
          <edm:ScalarProperty Name="LastName" ColumnName="LastName"/>
          <edm:ScalarProperty Name="FirstName" 
               ColumnName="FirstName" />
          <edm:ScalarProperty Name="Title" ColumnName="Title" />
          <edm:ScalarProperty Name="Email" ColumnName="Email" />
        </edm:MappingFragment>
      </edm:EntityTypeMapping>
    </edm:EntitySetMapping>
    <edm:EntitySetMapping Name="ContactPersonReference">
      <edm:EntityTypeMapping
    TypeName="ResearchCollaborationDataModel.ContactPersonReference">
        <edm:MappingFragment StoreEntitySet="ContactPersonReference">
          <edm:ScalarProperty Name="ContactPersonRefID"
              ColumnName="ContactPersonRefID" />
        </edm:MappingFragment>
      </edm:EntityTypeMapping>
    </edm:EntitySetMapping>
    <edm:EntitySetMapping Name="Reference">
      <edm:EntityTypeMapping
            TypeName="ResearchCollaborationDataModel.Reference">
        <edm:MappingFragment StoreEntitySet="Reference">
          <edm:ScalarProperty Name="ReferenceID"
               ColumnName="ReferenceID" />
          <edm:ScalarProperty Name="DocumentType"
               ColumnName="DocumentType" />
          <edm:ScalarProperty Name="DocumentText"
               ColumnName="DocumentText" />
          <edm:ScalarProperty Name="Locator" 
               ColumnName="Locator" />
        </edm:MappingFragment>
      </edm:EntityTypeMapping>
    </edm:EntitySetMapping>
    <edm:EntitySetMapping Name="ReferenceDescriptor">
      <edm:EntityTypeMapping
       TypeName="ResearchCollaborationDataModel.ReferenceDescriptor">
        <edm:MappingFragment StoreEntitySet="ReferenceDescriptor">
          <edm:ScalarProperty Name="DescriptorID"
               ColumnName="DescriptorID" />
          <edm:ScalarProperty Name="Annotation" 
               ColumnName="Annotation" />
          <edm:ScalarProperty Name="Keyword" ColumnName="Keyword" />
        </edm:MappingFragment>
      </edm:EntityTypeMapping>
    </edm:EntitySetMapping>
    <edm:AssociationSetMapping Name="LinkTable_ContactPerson"
      TypeName="ResearchCollaborationDataModel.LinkTable_ContactPerson"
        StoreEntitySet="ContactPersonReference">
      <edm:EndProperty Name="ContactPerson">
        <edm:ScalarProperty Name="ContactPersonID"
              ColumnName="ContactPersonID" />
      </edm:EndProperty>
      <edm:EndProperty Name="ContactPersonReference">
        <edm:ScalarProperty Name="ContactPersonRefID"
             ColumnName="ContactPersonRefID" />
      </edm:EndProperty>
      <edm:Condition ColumnName="ContactPersonID" IsNull="false" />
    </edm:AssociationSetMapping>
    <edm:AssociationSetMapping Name="LinkTable_Reference"
         TypeName="ResearchCollaborationDataModel.LinkTable_Reference"
         StoreEntitySet="ContactPersonReference">
      <edm:EndProperty Name="Reference">
        <edm:ScalarProperty Name="ReferenceID" 
              ColumnName="ReferenceID" />
      </edm:EndProperty>
      <edm:EndProperty Name="ContactPersonReference">
        <edm:ScalarProperty Name="ContactPersonRefID"
             ColumnName="ContactPersonRefID" />
      </edm:EndProperty>
      <edm:Condition ColumnName="ReferenceID" IsNull="false" />
    </edm:AssociationSetMapping>
    <edm:AssociationSetMapping Name="ReferenceDescriptor_Reference"
  TypeName="ResearchCollaborationDataModel.ReferenceDescriptor_Reference"
  StoreEntitySet="ReferenceDescriptor">
      <edm:EndProperty Name="Reference">
        <edm:ScalarProperty Name="ReferenceID" 
            ColumnName="ReferenceID" />
      </edm:EndProperty>
      <edm:EndProperty Name="ReferenceDescriptor">
        <edm:ScalarProperty Name="DescriptorID"
            ColumnName="DescriptorID" />
      </edm:EndProperty>
      <edm:Condition ColumnName="ReferenceID" IsNull="false" />
    </edm:AssociationSetMapping>
  </edm:EntityContainerMapping>
</Mapping>

可以使用以下脚本来创建此示例使用的数据库。若要使用 SQL Server Management Studio 创建 ResearchCollaborationData 数据库和架构,请执行以下操作:

  1. 在“文件”菜单上,指向“新建”,然后单击“数据库引擎查询”。

  2. 在“连接到数据库引擎”对话框中,键入 localhost 或 SQL Server 实例的名称,然后单击“连接”。

  3. 将以下 Transact-SQL 脚本粘贴到查询窗口中,然后单击“执行”。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

USE [master];
GO

IF EXISTS (SELECT * FROM sys.databases 
WHERE name = 'ResearchCollaborationData')
DROP DATABASE ResearchCollaborationData;
GO

-- Create the database.
CREATE DATABASE ResearchCollaborationData;
GO

USE ResearchCollaborationData;
GO

IF NOT EXISTS (SELECT * FROM sys.objects 
WHERE object_id = OBJECT_ID(N'[dbo].[ContactPerson]') 
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[ContactPerson](
[ContactPersonID] [uniqueidentifier] NOT NULL,
[LastName] [nvarchar](50) NOT NULL,
[FirstName] [nvarchar](50) NOT NULL,
[Title] [nvarchar](50) NULL,
[Email] [nvarchar](50) NOT NULL,
 CONSTRAINT [PK_ContactPerson] PRIMARY KEY CLUSTERED 
(
[ContactPersonID] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects 
WHERE object_id = OBJECT_ID(N'[dbo].[Reference]') 
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Reference](
[ReferenceID] [uniqueidentifier] NOT NULL,
[DocumentType] [nvarchar](8) NULL,
[DocumentText] [nvarchar](max) NULL,
[Locator] [nvarchar](500) NOT NULL,
 CONSTRAINT [PK_Reference] PRIMARY KEY CLUSTERED 
(
[ReferenceID] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects 
WHERE object_id = OBJECT_ID(N'[dbo].[ContactPersonReference]') 
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[ContactPersonReference](
[ContactPersonID] [uniqueidentifier] NOT NULL,
[ReferenceID] [uniqueidentifier] NOT NULL,
[ContactPersonRefID] [uniqueidentifier] NOT NULL,
 CONSTRAINT [PK_ContactPersonReference] PRIMARY KEY CLUSTERED 
(
[ContactPersonRefID] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects 
WHERE object_id = OBJECT_ID(N'[dbo].[ReferenceDescriptor]') 
AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[ReferenceDescriptor](
[DescriptorID] [uniqueidentifier] NOT NULL,
[ReferenceID] [uniqueidentifier] NOT NULL,
[Annotation] [nvarchar](2000) NULL,
[Keyword] [nvarchar](50) NULL,
 CONSTRAINT [PK_ReferenceDescriptor] PRIMARY KEY CLUSTERED 
(
[DescriptorID] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys 
WHERE object_id = OBJECT_ID(N'[dbo].[LinkTable_ContactPerson]') AND parent_object_id = 
OBJECT_ID(N'[dbo].[ContactPersonReference]'))
ALTER TABLE [dbo].[ContactPersonReference]  
WITH CHECK ADD  CONSTRAINT [LinkTable_ContactPerson] FOREIGN KEY([ContactPersonID])
REFERENCES [dbo].[ContactPerson] ([ContactPersonID])
GO
ALTER TABLE [dbo].[ContactPersonReference] CHECK CONSTRAINT [LinkTable_ContactPerson]
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys 
WHERE object_id = OBJECT_ID(N'[dbo].[LinkTable_Reference]') AND parent_object_id = 
OBJECT_ID(N'[dbo].[ContactPersonReference]'))
ALTER TABLE [dbo].[ContactPersonReference]  
WITH CHECK ADD  CONSTRAINT [LinkTable_Reference] FOREIGN KEY([ReferenceID])
REFERENCES [dbo].[Reference] ([ReferenceID])
GO
ALTER TABLE [dbo].[ContactPersonReference] CHECK CONSTRAINT [LinkTable_Reference]
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys 
WHERE object_id = OBJECT_ID(N'[dbo].[ReferenceDescriptor_Reference]') 
AND parent_object_id = OBJECT_ID(N'[dbo].[ReferenceDescriptor]'))
ALTER TABLE [dbo].[ReferenceDescriptor]  
WITH CHECK ADD  CONSTRAINT [ReferenceDescriptor_Reference] FOREIGN KEY([ReferenceID])
REFERENCES [dbo].[Reference] ([ReferenceID])
GO
ALTER TABLE [dbo].[ReferenceDescriptor] CHECK CONSTRAINT [ReferenceDescriptor_Reference]
GO

USE ResearchCollaborationData
GO

INSERT INTO dbo.Reference(ReferenceId, DocumentType, DocumentText, Locator)
VALUES ('12b18fe1-be82-486c-b248-00183aad2c88', '', '', 'https://msdn2.microsoft.com/en-us/data/aa937722.aspx')
INSERT INTO dbo.Reference(ReferenceId, DocumentType, DocumentText, Locator)
VALUES ('34bf3c5f-202a-45fe-af42-0a1d9bf489e2', '', '', 'https://msdn2.microsoft.com/en-us/library/190bkk9s.aspx')
INSERT INTO dbo.Reference(ReferenceId, DocumentType, DocumentText, Locator)
VALUES ('cfc4a592-296d-4b6f-b8fe-0e7a42b4a29a', '', '', 'https://blogs.msdn.com/adonet/archive/2007/01/30/entity-data-model-part-1.aspx')
INSERT INTO dbo.Reference(ReferenceId, DocumentType, DocumentText, Locator)
VALUES ('aad24f4c-c461-4d62-8723-6b52574311d1', '', '', 'https://www.microsoft.com/windows/directx/productinfo/overview/default.mspx')
INSERT INTO dbo.Reference(ReferenceId, DocumentType, DocumentText, Locator)
VALUES ('7d4a1c27-3046-4866-974f-81b1e4642719', '', '', 'https://msdn2.microsoft.com/en-us/library/ms269115.aspx')
INSERT INTO dbo.Reference(ReferenceId, DocumentType, DocumentText, Locator)
VALUES ('7b217f44-3ed0-492f-aaf6-8c064e3e8c75', '', '', 'https://www.microsoft.com/casestudies/casestudy.aspx?casestudyid=49271')
INSERT INTO dbo.Reference(ReferenceId, DocumentType, DocumentText, Locator)
VALUES ('dbd5d613-990b-4280-b739-8d1ad4476a5f', '', '', 'https://www.microsoft.com/windows/directx/default.mspx')
INSERT INTO dbo.Reference(ReferenceId, DocumentType, DocumentText, Locator)
VALUES ('4f267ad7-c1e8-469c-aff7-9a766952c40c', '', '', 'https://www.microsoft.com/windowsvista/features/foreveryone/networking.mspx')
INSERT INTO dbo.Reference(ReferenceId, DocumentType, DocumentText, Locator)
VALUES ('1ca96c96-cd2a-48b2-998f-a3fd0b98234e', '', '', 'https://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx')
INSERT INTO dbo.Reference(ReferenceId, DocumentType, DocumentText, Locator)
VALUES ('f22e9a75-727c-4829-80dd-bbfdaaad49dc', '', '', 'https://www.microsoft.com/windows/embedded/about.mspx')
INSERT INTO dbo.Reference(ReferenceId, DocumentType, DocumentText, Locator)
VALUES ('3d5da450-28eb-4741-80a7-c748f72522a9', '', '', 'https://www.microsoft.com/windows/windowsmedia/default.mspx')
INSERT INTO dbo.Reference(ReferenceId, DocumentType, DocumentText, Locator)
VALUES ('6edd9142-ce7f-440d-9769-cde1ccbdf317', '', '', 'https://www.microsoft.com/windows/embedded/default.mspx')
INSERT INTO dbo.Reference(ReferenceId, DocumentType, DocumentText, Locator)
VALUES ('79bb7135-1516-43cb-9054-da83b9ecda29', '', '', 'http://members.microsoft.com/CustomerEvidence/search/EvidenceDetails.aspx?EvidenceID=13673&LanguageID=1')
INSERT INTO dbo.Reference(ReferenceId, DocumentType, DocumentText, Locator)
VALUES ('c387fdcc-cea9-45ce-90b8-e4ac1bd4cc28', '', '', 'https://msdn.microsoft.com/vstudio/')
INSERT INTO dbo.Reference(ReferenceId, DocumentType, DocumentText, Locator)
VALUES ('b4271f82-4ac5-4955-868e-f24d1b0f5bb1', '', '', 'https://www.microsoft.com/casestudies/casestudy.aspx?casestudyid=49271')
INSERT INTO dbo.Reference(ReferenceId, DocumentType, DocumentText, Locator)
VALUES ('6e862d8d-88e4-4d86-8119-ffc53db0a17a', '', '', 'https://blogs.msdn.com/adonet/archive/2006/09/27/ADONET_vNext_EDM_Designer.aspx')


INSERT INTO dbo.ReferenceDescriptor(DescriptorID, Annotation, Keyword, ReferenceID)
VALUES ('93790357-1fb2-4314-a26a-0187ad5ccb6f', 'The power of multimedia in Windows, DirectX gives you the best possible experience with graphics, sound, music, and 3-D animation.', 'DirectX', 'dbd5d613-990b-4280-b739-8d1ad4476a5f')
INSERT INTO dbo.ReferenceDescriptor(DescriptorID, Annotation, Keyword, ReferenceID)
VALUES ('b796b125-dc94-4a7a-86a2-10f3ac6ad0b3', 'Windows embedded', 'embedded', 'f22e9a75-727c-4829-80dd-bbfdaaad49dc')
INSERT INTO dbo.ReferenceDescriptor(DescriptorID, Annotation, Keyword, ReferenceID)
VALUES ('c13b2689-cb3a-4a2c-a4ca-14a1c8a02f71', 'Windows media', 'Windows Media', '3d5da450-28eb-4741-80a7-c748f72522a9')
INSERT INTO dbo.ReferenceDescriptor(DescriptorID, Annotation, Keyword, ReferenceID)
VALUES ('d4c4f616-cfb3-4799-889d-15cca8f7709f', 'Results:
ADO.NET
The designer in this CTP is an early prototype and only supports designing the “Conceptual” layer. The designer can also generate an Entity Data Model with 1:1 mappings from an existing database that you can use right away in your application while also graphically visualizing the “Conceptual” layer. Please take a look at the walkthroughs in the Overview document included with the Entity Data Model Designer prototype for more details.
https://blogs.msdn.com/adonet/archive/2006/09/27/ADONET_vNext_EDM_Designer.aspx

ADO.NET 2.0

https://msdn2.microsoft.com/en-us/data/aa937722.aspx

EDM
Generate an Entity Data Model with 1:1 mappings from an existing database that you can use right away in your application while also graphically visualizing the “Conceptual” layer. To aid brainstorming and to better understand typical developer scenarios, the ADO.NET team created an internal prototype of a designer to let developers model the ADO.NET vNext “Conceptual” layer.
https://blogs.msdn.com/adonet/archive/2006/09/27/ADONET_vNext_EDM_Designer.aspx

Entity Data Model 101
Most developers are familiar with the Object/Relational Mapping (ORM) problem: databases use the abstraction of rows in tables, but application programs use the abstraction of classes and objects. Existing ORM frameworks tend to address this mismatch by allowing programming classes to be annotated in order to relate them to the database. 
The intent with ADO.NET is more ambitious: We view the ORM problem as just one of a number of services we want to build on the database. Other services include reporting, synchronization, backup, and so on. In order to cover all of these services, we have designed a data model that is similar to the object-oriented idiom that programmers use, while remaining independent of any particular programming language or programming platform. This data model is the Entity Data Model (EDM).

https://blogs.msdn.com/adonet/archive/2007/01/30/entity-data-model-part-1.aspx
', 'Visual Studio pre-release product, '1ca96c96-cd2a-48b2-998f-a3fd0b98234e')
INSERT INTO dbo.ReferenceDescriptor(DescriptorID, Annotation, Keyword, ReferenceID)
VALUES ('e01d0af6-cc8c-4ccd-b1dd-17d2fac19878', 'The designer in this CTP is an early prototype and only supports designing the “Conceptual” layer. The designer can also generate an Entity Data Model with 1:1 mappings from an existing database that you can use right away in your application while also graphically visualizing the “Conceptual” layer. Please take a look at the walkthroughs in the Overview document included with the Entity Data Model Designer prototype for more details.', 'ADO.NET', '6e862d8d-88e4-4d86-8119-ffc53db0a17a')
INSERT INTO dbo.ReferenceDescriptor(DescriptorID, Annotation, Keyword, ReferenceID)
VALUES ('255291b6-6377-4b26-9cbd-3dd58d921ef0', 'ADO.NET', 'ADO.NET 2.0', '12b18fe1-be82-486c-b248-00183aad2c88')
INSERT INTO dbo.ReferenceDescriptor(DescriptorID, Annotation, Keyword, ReferenceID)
VALUES ('42598bdb-849a-4af9-96ee-61b8ecbc6931', 'Generate an Entity Data Model with 1:1 mappings from an existing database that you can use right away in your application while also graphically visualizing the “Conceptual” layer. To aid brainstorming and to better understand typical developer scenarios, the ADO.NET team created an internal prototype of a designer to let developers model the ADO.NET vNext “Conceptual” layer.', 'EDM', '6e862d8d-88e4-4d86-8119-ffc53db0a17a')
INSERT INTO dbo.ReferenceDescriptor(DescriptorID, Annotation, Keyword, ReferenceID)
VALUES ('4dd38a1f-6aad-412c-880b-72b83b686040', 'Hilton Hotels needed to develop a forecasting system to improve its business analysis process by establishing more accurate pricing and financial planning. It first created its OnQ Forecast Management System built using Microsoft® SQL Server™ 2000 to help forecast guestroom business. To extend the existing application, Hilton Hotels built a solution based on the Microsoft .NET Framework version 2.0 using the Microsoft Visual Studio® 2005 development system. Major solution components include: Microsoft SQL Server 2005 running on the Microsoft Windows Server™ 2003 operating system, both part of Microsoft Windows Server System™ integrated server software; and SQL Server 2005 Analysis Services, Reporting Services, and Integration Services. ', 'SQL Server', '79bb7135-1516-43cb-9054-da83b9ecda29')
INSERT INTO dbo.ReferenceDescriptor(DescriptorID, Annotation, Keyword, ReferenceID)
VALUES ('34a25e0e-1ed8-4d25-bc94-7c0da669c10a', 'Visual Studio is the development tool for creating drivers, applications and services across the Windows Embedded family of operating systems. Join the Visual Studio Community to get assistance with your coding projects.', 'embedded', '6edd9142-ce7f-440d-9769-cde1ccbdf317')
INSERT INTO dbo.ReferenceDescriptor(DescriptorID, Annotation, Keyword, ReferenceID)
VALUES ('cba41151-26f0-4d87-ab3a-9dab2f42b328', 'Most developers are familiar with the Object/Relational Mapping (ORM) problem: databases use the abstraction of rows in tables, but application programs use the abstraction of classes and objects. Existing ORM frameworks tend to address this mismatch by allowing programming classes to be annotated in order to relate them to the database. 
The intent with ADO.NET is more ambitious: We view the ORM problem as just one of a number of services we want to build on the database. Other services include reporting, synchronization, backup, and so on. In order to cover all of these services, we have designed a data model that is similar to the object-oriented idiom that programmers use, while remaining independent of any particular programming language or programming platform. This data model is the Entity Data Model (EDM).
', 'Entity Data Model 101', 'cfc4a592-296d-4b6f-b8fe-0e7a42b4a29a')
INSERT INTO dbo.ReferenceDescriptor(DescriptorID, Annotation, Keyword, ReferenceID)
VALUES ('5b7c783c-41a4-435a-8e18-b10851af1163', 'Microsoft DirectX is an advanced suite of multimedia application programming interfaces (APIs) built into Microsoft Windows; operating systems. DirectX provides a standard development platform for Windows-based PCs by enabling software developers to access specialized hardware features without having to write hardware-specific code.', 'DirectX', 'aad24f4c-c461-4d62-8723-6b52574311d1')
INSERT INTO dbo.ReferenceDescriptor(DescriptorID, Annotation, Keyword, ReferenceID)
VALUES ('485489f8-b5f8-4866-ad77-d8390c01a872', 'NASDAQ, which became the world’s first electronic stock market in 1971, and remains the largest U.S. electronic stock market, is constantly looking for more-efficient ways to serve its members. As the organization prepared to retire its aging Tandem mainframes, it deployed Microsoft® SQL Server™ 2005 on two 4-node Dell PowerEdge 6850 clusters to support its Market Data Dissemination System (MDDS). Every trade that is processed in the NASDAQ marketplace goes through the MDDS system, with SQL Server 2005 handling some 5,000 transactions per second at market open. SQL Server 2005 simultaneously handles about 100,000 queries a day, using SQL Server 2005 Snapshot Isolation to support real-time queries against the data without slowing the database. NASDAQ is enjoying a lower total cost of ownership compared to the Tandem Enscribe system that the SQL Server 2005 deployment has replaced.', 'SQL Server', '7b217f44-3ed0-492f-aaf6-8c064e3e8c75')
INSERT INTO dbo.ReferenceDescriptor(DescriptorID, Annotation, Keyword, ReferenceID)
VALUES ('c92409cd-4fa9-45e1-ba03-ff4b2386aa37', 'Pre-Release product 2 includes most of the products found in the Visual Studio product line. As with all prerelease software, we encourage you only to install these on a secondary machine, or in a virtual machine, as they are not supported by Microsoft Services support teams. As the goal of these previews is to gather feedback from the developer community, please use Microsoft Connect <http://connect.microsoft.com/visualstudio/> to report any issues, or to suggest improvements. MSDN Subscribers can also download these files from MSDN Subscriber Downloads <https://msdn2.microsoft.com/subscriptions/default.aspx>.', 'Visual Studio pre-release', '1ca96c96-cd2a-48b2-998f-a3fd0b98234e')


INSERT INTO dbo.ContactPerson(ContactPersonID, Email, FirstName, LastName, Title)
VALUES ('4887ae30-9820-408b-b4d7-061b7f1493b1', 'dankbac@adatum.com', 'Dan K', 'Bacon Jr.', 'Developer')
INSERT INTO dbo.ContactPerson(ContactPersonID, Email, FirstName, LastName, Title)
VALUES ('f8ff60e3-2b61-46d8-ac51-6a949f535127', 'kkelly@adatum.com', 'Kevin', 'Kelly', 'PM')
INSERT INTO dbo.ContactPerson(ContactPersonID, Email, FirstName, LastName, Title)
VALUES ('9a9d9c1c-0d70-4518-a279-937e272e6126', 'ravitart@adatum.com', 'Ravital', 'Artman', 'PUM')
INSERT INTO dbo.ContactPerson(ContactPersonID, Email, FirstName, LastName, Title)
VALUES ('1e08378d-51cb-4ca9-b39e-bd0679c85658', 'etienjac@adatum.com', 'Etienne P.', 'Jacques', 'Game Developer')
INSERT INTO dbo.ContactPerson(ContactPersonID, Email, FirstName, LastName, Title)
VALUES ('c6e87603-23ff-425f-9979-c0be2bd7f1c9', 'hodixon@adatum.com', 'Holly', 'Dixon', 'Programming Writer')
INSERT INTO dbo.ContactPerson(ContactPersonID, Email, FirstName, LastName, Title)
VALUES ('099380da-2ab8-4d45-a023-d137c885e6c9', 'bscholl@adatum.com', 'Boris', 'Scholl', 'Network Administrator')
INSERT INTO dbo.ContactPerson(ContactPersonID, Email, FirstName, LastName, Title)
VALUES ('bcc99ee4-b177-4183-82cd-d2977b21375e', 'jessicaarn@adatum.com', 'Jessica', 'Arnold', 'PM')


INSERT INTO dbo.ContactPersonReference(ContactPersonRefID, ContactPersonID, ReferenceID)
VALUES ('56872a7b-4df1-45c9-b32c-1f4cf70161a5', 'bcc99ee4-b177-4183-82cd-d2977b21375e', '3d5da450-28eb-4741-80a7-c748f72522a9')
INSERT INTO dbo.ContactPersonReference(ContactPersonRefID, ContactPersonID, ReferenceID)
VALUES ('70a2a910-8445-4583-9efa-32625f24b447', '4887ae30-9820-408b-b4d7-061b7f1493b1', '34bf3c5f-202a-45fe-af42-0a1d9bf489e2')
INSERT INTO dbo.ContactPersonReference(ContactPersonRefID, ContactPersonID, ReferenceID)
VALUES ('7bdf4546-baee-4d0e-8c75-403f363d30d9', 'c6e87603-23ff-425f-9979-c0be2bd7f1c9', '6e862d8d-88e4-4d86-8119-ffc53db0a17a')
INSERT INTO dbo.ContactPersonReference(ContactPersonRefID, ContactPersonID, ReferenceID)
VALUES ('c6b9bbd8-1c95-4e64-bef1-50ac841b6e66', '1e08378d-51cb-4ca9-b39e-bd0679c85658', 'aad24f4c-c461-4d62-8723-6b52574311d1')
INSERT INTO dbo.ContactPersonReference(ContactPersonRefID, ContactPersonID, ReferenceID)
VALUES ('b7af3437-9d6c-4e80-ba2a-5aad08f33bc9', '9a9d9c1c-0d70-4518-a279-937e272e6126', '3d5da450-28eb-4741-80a7-c748f72522a9')
INSERT INTO dbo.ContactPersonReference(ContactPersonRefID, ContactPersonID, ReferenceID)
VALUES ('a5901fb1-17ec-4151-9f66-689385f2cde2', 'f8ff60e3-2b61-46d8-ac51-6a949f535127', 'b4271f82-4ac5-4955-868e-f24d1b0f5bb1')
INSERT INTO dbo.ContactPersonReference(ContactPersonRefID, ContactPersonID, ReferenceID)
VALUES ('c7447067-46fc-46ae-9484-6bedbbb1bdce', 'bcc99ee4-b177-4183-82cd-d2977b21375e', '6e862d8d-88e4-4d86-8119-ffc53db0a17a')
INSERT INTO dbo.ContactPersonReference(ContactPersonRefID, ContactPersonID, ReferenceID)
VALUES ('21ec9fb4-eedb-469e-95b7-799ecea5a336', '099380da-2ab8-4d45-a023-d137c885e6c9', '4f267ad7-c1e8-469c-aff7-9a766952c40c')
INSERT INTO dbo.ContactPersonReference(ContactPersonRefID, ContactPersonID, ReferenceID)
VALUES ('9bf1b016-137a-4d64-83b8-a24dd43b0a7c', 'c6e87603-23ff-425f-9979-c0be2bd7f1c9', 'dbd5d613-990b-4280-b739-8d1ad4476a5f')
INSERT INTO dbo.ContactPersonReference(ContactPersonRefID, ContactPersonID, ReferenceID)
VALUES ('40c6579e-2e78-4442-877f-b88ff8d2146d', '4887ae30-9820-408b-b4d7-061b7f1493b1', '7d4a1c27-3046-4866-974f-81b1e4642719')
INSERT INTO dbo.ContactPersonReference(ContactPersonRefID, ContactPersonID, ReferenceID)
VALUES ('0d3591d5-ebcf-4f18-84a8-f2e6f464ffb5', '4887ae30-9820-408b-b4d7-061b7f1493b1', 'c387fdcc-cea9-45ce-90b8-e4ac1bd4cc28')
INSERT INTO dbo.ContactPersonReference(ContactPersonRefID, ContactPersonID, ReferenceID)
VALUES ('f27879b2-c2b7-4f2c-b0eb-f4aafe388345', '9a9d9c1c-0d70-4518-a279-937e272e6126', 'f22e9a75-727c-4829-80dd-bbfdaaad49dc')
INSERT INTO dbo.ContactPersonReference(ContactPersonRefID, ContactPersonID, ReferenceID)
VALUES ('c85f4e11-2060-4ab4-98e2-fc8ff33ecea0', '9a9d9c1c-0d70-4518-a279-937e272e6126', '6edd9142-ce7f-440d-9769-cde1ccbdf317')

另请参见

概念

批注和研究协作工具(EDM 示例应用程序)
批注研究工具应用程序代码(EDM 示例应用程序)
关联 (EDM)
实体类型 (EDM)

其他资源

EDM 规范
架构和映射规范(实体框架)