概述
https://www.leadtools.com/help/leadtools/v20/dh/to/storage-catalog.html在Leadtools.Medical.Storage.DataAccessLayer.dll程序集中定义。 该目录定义了Leadtools.Medical.Storage.DataAccessLayer类和数据库模式之间的映射,并包含数据库模式中所有表名称的定义以及每个表的所有列。 所有存储目录被定义为一个xml文件。下面的教程将为教程数据库创建一个存储目录。
在此之前,请先确认,您已经为数据库中的每个表定义从CatalogEntity类派生的类。 比如,在本教程中,我们定义了四个类(每个表一个)。 存储目录链接到以下四个类:
- class MyPatient : CatalogEntity
- class MyStudy : CatalogEntity
- class MySeries : CatalogEntity
- class MyInstance : CatalogEntity
目录的结构由一个或多个
<CatalogDataSet>
<Entity>...</Entity>
<Entity>...</Entity>
...
<Element>...</Element>
<Element>...</Element>
...
</CatalogDataSet>
您必须为数据库定义存储目录。对于教程中的数据库结构,有四个表。下面这些是每个表的
<Entity>
<EntityKey>PatientTableEntityKey</EntityKey>
<EntityName>MyPatientTable</EntityName>
<DisplayName>MyPatientTable</DisplayName>
</Entity>
<Entity>
<EntityKey>StudyTableEntityKey</EntityKey>
<EntityName>MyStudyTable</EntityName>
<DisplayName>MyStudyTable</DisplayName>
</Entity>
<Entity>
<EntityKey>SeriesTableEntityKey</EntityKey>
<EntityName>MySeriesTable</EntityName>
<DisplayName>MySeriesTable</DisplayName>
</Entity>
<Entity>
<EntityKey>InstanceTableEntityKey</EntityKey>
<EntityName>MyInstanceTable</EntityName>
<DisplayName>MyInstanceTable</DisplayName>
</Entity>
每个元素的描述如下:
Element | 描述 |
---|---|
<EntityKey> | 任何唯一标识该表的名称。定义MyPatient类时,CatalogKey属性必须返回此处定义的 |
<EntityName> | 保存患者信息的数据库表的名称。对于教程数据库,患者表称为MyPatient。 |
<DisplayName> | 不使用 |
数据库结构中的每个表列必须有一个\
查询字段 | 对于的数据表 | 对应列 |
---|---|---|
Patient Last Name | MyPatientTable | PatientName |
PatientFirst Name | MyPatientTable | PatientName |
Patient ID | MyPatientTable | PatientIdentification |
Modality | MySeriesTable | SeriesModality |
Study ID | MyStudyTable | StudyStudyId |
Study Accession # | MyStudyTable | StudyAccessionNumber |
Referring Physician Last Name |
MyStudyTable | StudyReferringPhysiciansName |
Referring Physician Given Name |
MyStudyTable | StudyReferringPhysiciansName |
Studies Date From | MyStudyTable | StudyStudyDate |
Studies Date To | MyStudyTable | StudyStudyDate |
Storage Date | MyInstanceTable | ImageLastStoreDate |
Series Description | SeriesModality | SeriesSeriesDescription |
对于本教程来说,四个表中每个表的主键都是自动生成的主键。 这些是唯一没有相应的
例如,MyPatientTable有七列,所以目录中将有六个
<Element>
<EntityKey>PatientTableEntityKey</EntityKey>
<ElementKey>PatientIdentification</ElementKey>
<ElementName>PatientIdentification</ElementName>
<DisplayName>Patient ID</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>PatientTableEntityKey</EntityKey>
<ElementKey>PatientName</ElementKey>
<ElementName>PatientName</ElementName>
<DisplayName>Family Name</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>PatientTableEntityKey</EntityKey>
<ElementKey>PatientBirthday</ElementKey>
<ElementName>PatientBirthday</ElementName>
<DisplayName>Birth Date</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>PatientTableEntityKey</EntityKey>
<ElementKey>PatientSex</ElementKey>
<ElementName>PatientSex</ElementName>
<DisplayName>Sex</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>PatientTableEntityKey</EntityKey>
<ElementKey>PatientComments</ElementKey>
<ElementName>PatientComments</ElementName>
<DisplayName>Comments</DisplayName>
<KeyElement>false</KeyElement>
</Element>
每个元素的描述如下:
Element | 描述 |
---|---|
<EntityKey> | 该元素所属的表名<EntityKey>,对于患者表,这是“PatientTableEntityKey” |
<ElementKey> | MyPatient,MyStudy,MySeries,MyInstance类属性使用[EntityElementAttribute]属性进行装饰。 |
<ElementName> | 必须是相应表格的列名称 |
<DisplayName> | 不使用 |
<KeyElement> | 如果是主键则为true,否则为false |
对于本教程,存储目录的名称是MyCatalog.xml。
存储目录的完整路径在两个配置文件中指定:
- CSStorageServerManagerDemo.exe.config
- Leadtools.Dicom.Server.exe.config
这是需要添加到每个配置文件的内容:
<configSections>
<section name="xmlStorageCatalogSettings" type="Leadtools.Medical.Storage.DataAccessLayer.XmlStorageCatalogSettings, Leadtools.Medical.Storage.DataAccessLayer" />
</configSections>
<xmlStorageCatalogSettings catalogPath="C:\LEADTOOLS 20\Bin\Dotnet4\Win32\MyCatalog.xml"/>
最终,MyCatalog.xml的内容如下:
<CatalogDataSet>
<Entity>
<!--A name that uniquely identifies the patient table-->
<EntityKey>PatientTableEntityKey</EntityKey>
<!--Name of database table that holds the patient information-->
<EntityName>MyPatientTable</EntityName>
<!-- Not used-->
<DisplayName>MyPatientTable</DisplayName>
</Entity>
<Entity>
<EntityKey>StudyTableEntityKey</EntityKey>
<EntityName>MyStudyTable</EntityName>
<DisplayName>MyStudyTable</DisplayName>
</Entity>
<Entity>
<EntityKey>SeriesTableEntityKey</EntityKey>
<EntityName>MySeriesTable</EntityName>
<DisplayName>MySeriesTable</DisplayName>
</Entity>
<Entity>
<EntityKey>InstanceTableEntityKey</EntityKey>
<EntityName>MyInstanceTable</EntityName>
<DisplayName>MyInstanceTable</DisplayName>
</Entity>
<Element>
<!-- Table name to which the element belongs -->
<EntityKey>PatientTableEntityKey</EntityKey>
<!-- The MyPatient class properties are decorated with an [EntityElementAttribute] attribute. This must be identical to one of these properties. -->
<ElementKey>PatientIdentification</ElementKey>
<!-- Must be a column name of the corresponding table -->
<ElementName>PatientIdentification</ElementName>
<!-- Not used -->
<DisplayName>Patient ID</DisplayName>
<!-- True if a primary key; false otherwise -->
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>PatientTableEntityKey</EntityKey>
<ElementKey>PatientName</ElementKey>
<ElementName>PatientName</ElementName>
<DisplayName>Family Name</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>PatientTableEntityKey</EntityKey>
<ElementKey>PatientBirthday</ElementKey>
<ElementName>PatientBirthday</ElementName>
<DisplayName>Birth Date</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>PatientTableEntityKey</EntityKey>
<ElementKey>PatientSex</ElementKey>
<ElementName>PatientSex</ElementName>
<DisplayName>Sex</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>PatientTableEntityKey</EntityKey>
<ElementKey>PatientComments</ElementKey>
<ElementName>PatientComments</ElementName>
<DisplayName>Comments</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>SeriesTableEntityKey</EntityKey>
<ElementKey>SeriesSeriesInstanceUID</ElementKey>
<ElementName>SeriesSeriesInstanceUID</ElementName>
<DisplayName>Series Instance UID</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>SeriesTableEntityKey</EntityKey>
<ElementKey>SeriesModality</ElementKey>
<ElementName>SeriesModality</ElementName>
<DisplayName>Modality</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>SeriesTableEntityKey</EntityKey>
<ElementKey>SeriesSeriesNumber</ElementKey>
<ElementName>SeriesSeriesNumber</ElementName>
<DisplayName>Series Number</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>SeriesTableEntityKey</EntityKey>
<ElementKey>SeriesSeriesDate</ElementKey>
<ElementName>SeriesSeriesDate</ElementName>
<DisplayName>Series Date</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>SeriesTableEntityKey</EntityKey>
<ElementKey>SeriesSeriesDescription</ElementKey>
<ElementName>SeriesSeriesDescription</ElementName>
<DisplayName>Series Description</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>SeriesTableEntityKey</EntityKey>
<ElementKey>SeriesBodyPartExamined</ElementKey>
<ElementName>SeriesBodyPartExamined</ElementName>
<DisplayName>Body Part Examined</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>StudyTableEntityKey</EntityKey>
<ElementKey>StudyStudyInstanceUID</ElementKey>
<ElementName>StudyStudyInstanceUID</ElementName>
<DisplayName>Study Instance UID</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>StudyTableEntityKey</EntityKey>
<ElementKey>StudyStudyDate</ElementKey>
<ElementName>StudyStudyDate</ElementName>
<DisplayName>Study Date</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>StudyTableEntityKey</EntityKey>
<ElementKey>StudyAccessionNumber</ElementKey>
<ElementName>StudyAccessionNumber</ElementName>
<DisplayName>Accession Number</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>StudyTableEntityKey</EntityKey>
<ElementKey>StudyStudyId</ElementKey>
<ElementName>StudyStudyId</ElementName>
<DisplayName>Study ID</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>StudyTableEntityKey</EntityKey>
<ElementKey>StudyReferringPhysiciansName</ElementKey>
<ElementName>StudyReferringPhysiciansName</ElementName>
<DisplayName>Referring Physician</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>StudyTableEntityKey</EntityKey>
<ElementKey>StudyStudyDescription</ElementKey>
<ElementName>StudyStudyDescription</ElementName>
<DisplayName>Study Description</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>InstanceTableEntityKey</EntityKey>
<ElementKey>SOPInstanceUID</ElementKey>
<ElementName>SOPInstanceUID</ElementName>
<DisplayName>SOP Instance UID</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>InstanceTableEntityKey</EntityKey>
<ElementKey>ImageImageNumber</ElementKey>
<ElementName>ImageImageNumber</ElementName>
<DisplayName>Instance Number</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>InstanceTableEntityKey</EntityKey>
<ElementKey>ImageLastStoreDate</ElementKey>
<ElementName>ImageLastStoreDate</ElementName>
<DisplayName>Receive Date</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>InstanceTableEntityKey</EntityKey>
<ElementKey>ImageFilename</ElementKey>
<ElementName>ImageFilename</ElementName>
<DisplayName>Referenced File</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>InstanceTableEntityKey</EntityKey>
<ElementKey>ImageUniqueSOPClassUID</ElementKey>
<ElementName>ImageUniqueSOPClassUID</ElementName>
<DisplayName>SOP Class UID</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>InstanceTableEntityKey</EntityKey>
<ElementKey>ImageRows</ElementKey>
<ElementName>ImageRows</ElementName>
<DisplayName>Rows</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>InstanceTableEntityKey</EntityKey>
<ElementKey>ImageColumns</ElementKey>
<ElementName>ImageColumns</ElementName>
<DisplayName>Cols</DisplayName>
<KeyElement>false</KeyElement>
</Element>
<Element>
<EntityKey>InstanceTableEntityKey</EntityKey>
<ElementKey>ImageBitsAllocated</ElementKey>
<ElementName>ImageBitsAllocated</ElementName>
<DisplayName>Bits Allocated</DisplayName>
<KeyElement>false</KeyElement>
</Element>
了解更多
这是本系列的第四篇文章,本文介绍了LEAD医学存储服务器数据库的存储目录结构,我们将在《LEAD医疗存储服务器自定义数据库系列教程 – 数据库查询》系列的第五篇文章中,着重介绍LEAD医用存储服务器数据库的数据查询方式。