2011-03-17 4 views
1

나는 행운없이 꽤 오랫동안 답을 찾고있었습니다.NDBUnit 스키마 오류

내 테스트 데이터로 NDbUnit을 사용하고 있으며 내 XSD 파일을 자동으로 생성 할 수 있기를 원합니다. 클래스에 새 속성을 추가 할 때마다 XSD 파일을 다시 생성하지 않아도됩니다. 그래서 내 계획은 XsdDataContractExporter 클래스를 사용하여 XSD 파일을 자동으로 생성하는 것입니다. 일부 클래스에는 IList가 포함되어 있고 XML serializer를 사용하여 일부 오류가 발생했습니다.

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. 

, 내가 원하는 NDBUnit과 함께 사용할 유형에서 동적으로 생성 된 XSD 파일을 사용하여 데이터베이스에 테스트 데이터를 채 웁니다. 이것이 올바른 접근 방법입니까? 이렇게 생성 된 스키마이고 그건 내 오류를 제공합니다

공급 업체 :

<?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> 

어떤 조언이 좋은 것입니다! 들으, 프랑크

+0

재미있는 점은 XML 파일을 읽고 '_table_ values ​​(_value1_, _value2_ 등 ...)'에 삽입하는 것과 같은 작업을하는 사용자 지정 구성 요소를 작성하는 것입니다. 내 데이터베이스 스키마가 nhibernate의 내보내기 기능으로 이미 처리되었으므로 필요한 것은 거기에 데이터를 넣는 것뿐입니다. –

답변

0

이 게시물 Getting XML Schema from MS SQL Database (특히 정상 투표 대답)에 제안 목록을 참조하십시오뿐만 아니라 같은 일을 달성하기 위해 MyGeneration를 사용하여 내 제안을 확인합니다.

+0

그래,이 도구를 다운로드하려했지만 C# 클래스에서 XSD를 생성하는 데 명령 행에서 사용하는 방법에 대한 많은 문서가 없다 ... 그래서 수제 테스트 프레임 워크로 내 기회를 시험하고있다! –