Ошибка схемы NDBUnit - PullRequest
1 голос
/ 17 марта 2011

Я довольно долго безуспешно искал ответ.

Я использую NDbUnit для своих тестовых данных и хочу, чтобы мои файлы XSD могли генерироваться автоматически.Я не хочу обновлять мои XSD-файлы каждый раз, когда добавляю новое свойство в мои классы.Поэтому я планирую автоматически сгенерировать XSD-файлы, используя класс XsdDataContractExporter, поскольку некоторые из моих классов содержат IList, и я получил некоторые ошибки при использовании сериализатора xml.

Вот код, который я получил до сих пор:

XsdDataContractExporter exporter = new XsdDataContractExporter();
exporter.Export(typeof(Supplier));

//XmlQualifiedName xmlQualifiedName = exporter.GetRootElementName(typeof(Supplier));
foreach (XmlSchema schema in exporter.Schemas.Schemas()) {
    XmlWriter writer = XmlWriter.Create(String.Format(@"..\..\data\{0}.xsd", GetSchemaName(schema)), new XmlWriterSettings() {
    ConformanceLevel = ConformanceLevel.Auto,
    Encoding = Encoding.UTF8,
    Indent = true,
    OmitXmlDeclaration = false
});

foreach (XmlSchemaObject include in schema.Includes) {
    XmlSchemaImport importedSchema = include as XmlSchemaImport;
    if (importedSchema != null) {
        ArrayList lst = new ArrayList(exporter.Schemas.Schemas(importedSchema.Namespace));
        XmlSchema actualImportedSchema = (XmlSchema)lst[0];
        importedSchema.Schema = actualImportedSchema;
        importedSchema.SchemaLocation = Path.GetFullPath(String.Format(@"..\..\data\{0}.xsd", GetSchemaName(actualImportedSchema)));
    }
}
schema.Write(writer);
writer.Close();
}
DataSet ds = new DataSet();
ds.ReadXmlSchema(@"..\..\data\business.model.supplier.xsd");

проблема в том, что я получаю ошибку при чтении схемы:

failed: System.InvalidOperationException : Nested table 'SupplierCategory' which inherits its namespace cannot have multiple parent tables in different namespaces.

Суть в том, что я хочу использовать динамически сгенерированный XSD-файл из типа для использования с NDBUnitзаполнить мою базу данных с тестовыми данными.Это правильный подход?Это схема, которая генерируется, и это дает мне ошибку:

Поставщик:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/Business.Model.Supplier" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/Business.Model.Supplier" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:import schemaLocation="C:\dev\skeleton\branches\dev\src\testconsole\data\business.model.supplier.category.xsd" namespace="http://schemas.datacontract.org/2004/07/Business.Model.Supplier.Category" />
  <xs:import schemaLocation="C:\dev\skeleton\branches\dev\src\testconsole\data\arrays.xsd" namespace="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
  <xs:complexType name="Supplier">
    <xs:sequence>
      <xs:element minOccurs="0" name="Categories" nillable="true" xmlns:q1="http://schemas.datacontract.org/2004/07/Business.Model.Supplier.Category" type="q1:ArrayOfSupplierCategory" />
      <xs:element minOccurs="0" name="Comments" nillable="true" xmlns:q2="http://schemas.microsoft.com/2003/10/Serialization/Arrays" type="q2:ArrayOfstring" />
      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
      <xs:element minOccurs="0" name="Name" nillable="true" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="Supplier" nillable="true" type="tns:Supplier" />
</xs:schema>

SupplierCategory:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:tns="http://schemas.datacontract.org/2004/07/Business.Model.Supplier.Category" elementFormDefault="qualified" targetNamespace="http://schemas.datacontract.org/2004/07/Business.Model.Supplier.Category" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="ArrayOfSupplierCategory">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="SupplierCategory" nillable="true" type="tns:SupplierCategory" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="ArrayOfSupplierCategory" nillable="true" type="tns:ArrayOfSupplierCategory" />
  <xs:complexType name="SupplierCategory">
    <xs:sequence>
      <xs:element minOccurs="0" name="Description" nillable="true" type="xs:string" />
    </xs:sequence>
  </xs:complexType>
  <xs:element name="SupplierCategory" nillable="true" type="tns:SupplierCategory" />
</xs:schema>

Любой совет будет отличным!Спасибо, Франк

1 Ответ

0 голосов
/ 18 марта 2011

См. Список предложений в этом посте Получение XML-схемы из базы данных MS SQL (в частности, ответ с наибольшим количеством голосов), но также обратите внимание на мое предложение использовать MyGeneration для достижения того же.

...