Мне нужно создать файл DataSet.xsd в соответствии с файлом NHibernate.hbm.xml или файлом класса. Это файлы Mapping и файлы классов, которые мы используем для работы с нашей БД.
Вы можете спросить меня, зачем мне нужен файл DataSet, сгенерированный из файла Nhibernate.hbm.xml или из файла .cs?
Это потому, что мы используем Crystal Reports, и мы используем Frameworks, MVVM, INotifyPropertyChanged, NHibernate и после было бы лучше много изучать , для нашего случая если мы преобразуем объект во время выполнения программы и используем его для генерации отчета. Если этот инструмент существует, он станет проще, потому что в нашей базе данных более 60, 70 столбцов на таблицу. Поскольку все эти компоненты уже включены в наш проект, мы не будем иметь смысла, если начнем использовать sql-запросы для генерации отчетов.
Этот инструмент, или «способ» создания этого файла DataSet, должен прочитать этот файл в следующих форматах:
Файл Nhibernate.hbm.xml:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="PCT.Domain" namespace="Gerdau.PCT.Kernel.Domain">
<class name="Furnace" table="Furnace" lazy="false">
<id name="Id" column="Id_Furnace" type="Int64">
<generator class="Geraes.GLib.GDomainBasis.CustomTableHiLoGenerator, GLib.GDomainBasis" />
</id>
<property name="Name" column="Name" type="String" length="50" not-null="true"/>
<property name="Code" column="Code" type="Char" not-null="true"/>
<property name="Mill" column="Mill" type="String" length="2" not-null="true"/>
<property name="DischEnabled" column="Disch_Enabled" type="Char" not-null="true"/>
<property name="DischEnabledTemp" column="Disch_Enabled_Temp" type="Char" not-null="true"/>
<property name="ChargeEnabled" column="Charge_Enabled" type="Char" not-null="true"/>
<property name="ChargeEnabledTemp" column="Charge_Enabled_Temp" type="Char" not-null="true"/>
</class>
</hibernate-mapping>
CSharp .cs Файл:
public class Furnace : BaseEntity
{
public virtual String Name { get; set; }
public virtual Char Code { get; set; }
public virtual String Mill { get; set; }
public virtual Char DischEnabled { get; set; }
public virtual Boolean DischEnabledConv
{
get
{
return DischEnabled.ConvertYesNoToBoolean();
}
set
{
DischEnabled = ((Boolean)value).ConvertYesNoToBoolean();
}
}
public virtual Boolean DischEnabledTempConv
{
get
{
return DischEnabledTemp.ConvertYesNoToBoolean();
}
set
{
DischEnabledTemp = ((Boolean)value).ConvertYesNoToBoolean();
}
}
public virtual Char DischEnabledTemp { get; set; }
public virtual Char ChargeEnabled { get; set; }
public virtual Boolean ChargeEnabledConv
{
get
{
return ChargeEnabled.ConvertYesNoToBoolean();
}
set
{
ChargeEnabled = ((Boolean)value).ConvertYesNoToBoolean();
}
}
public virtual Boolean ChargeEnabledTempConv
{
get
{
return ChargeEnabledTemp.ConvertYesNoToBoolean();
}
set
{
ChargeEnabledTemp = ((Boolean)value).ConvertYesNoToBoolean();
}
}
public virtual Char ChargeEnabledTemp { get; set; }
public virtual ConfiguracaoForno MillConv
{
get
{
if (Mill == ConfiguracaoForno.SM.ToString())
return ConfiguracaoForno.SM;
if (Mill == ConfiguracaoForno.PM.ToString())
return ConfiguracaoForno.PM;
else
return ConfiguracaoForno.NN;
}
}
public override String ToString()
{
return "Forno " + Code + " (" + Name + "): Laminador " + MillConv;
}
}
Я знаю, что это очень специфический случай, но если вы покажете нам хотя бы какой-то способ, это очень поможет.
С уважением,
Густаво
Edit:
Нашел способ сделать это: используя XSD.EXE, внутренний инструмент из Visual Studio, я извлек отображение из моей сборки:
C:\>xsd / c /l:CS -t:Furnace <MyAssembly>.dll -o:"D:\Temp"
Но теперь, когда я делаю это:
D:\>xsd /c schema0.xsd
Результаты в этих ошибках:
D: \ Temp> xsd / c schema0.xsd
Утилита поддержки Microsoft (R) Xml Schemas / DataTypes
[Microsoft (R) .NET Framework, версия 4.0.30319.1]
Авторское право (C) Microsoft Corporation. Все права защищены.
Предупреждение о проверке схемы: тип 'char' не объявлен или не является простым типом.
Строка 21, позиция 5.
Предупреждение о проверке схемы: тип 'http://microsoft.com/wsdl/types/:char' не объявлен. Строка 10, позиция 7.
Предупреждение о проверке схемы: тип 'http://microsoft.com/wsdl/types/:char' не объявлен. Строка 12, позиция 7.
Предупреждение о проверке схемы: тип 'http://microsoft.com/wsdl/types/:char' не объявлен. Строка 15, позиция 7.
Предупреждение о проверке схемы: тип 'http://microsoft.com/wsdl/types/:char' не объявлен. Строка 16, позиция 7.
Предупреждение о проверке схемы: тип 'http://microsoft.com/wsdl/types/:char' не объявлен. Строка 19, позиция 7.
Предупреждение: схема не может быть проверена. Генерация классов может завершиться неудачно или может привести к неверным результатам.
Ошибка: ошибка при создании классов для схемы «schema0».
- Тип данных 'char' отсутствует.
Если вам нужна дополнительная помощь, введите "xsd /?".
Вот мой сгенерированный schema.xsd:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import namespace="http://microsoft.com/wsdl/types/" />
<xs:element name="Furnace" nillable="true" type="Furnace" />
<xs:complexType name="Furnace">
<xs:complexContent mixed="false">
<xs:extension base="BaseEntity">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="Code" xmlns:q1="http://microsoft.com/wsdl/types/" type="q1:char" />
<xs:element minOccurs="0" maxOccurs="1" name="Mill" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="DischEnabled" xmlns:q2="http://microsoft.com/wsdl/types/" type="q2:char" />
<xs:element minOccurs="1" maxOccurs="1" name="DischEnabledConv" type="xs:boolean" />
<xs:element minOccurs="1" maxOccurs="1" name="DischEnabledTempConv" type="xs:boolean" />
<xs:element minOccurs="1" maxOccurs="1" name="DischEnabledTemp" xmlns:q3="http://microsoft.com/wsdl/types/" type="q3:char" />
<xs:element minOccurs="1" maxOccurs="1" name="ChargeEnabled" xmlns:q4="http://microsoft.com/wsdl/types/" type="q4:char" />
<xs:element minOccurs="1" maxOccurs="1" name="ChargeEnabledConv" type="xs:boolean" />
<xs:element minOccurs="1" maxOccurs="1" name="ChargeEnabledTempConv" type="xs:boolean" />
<xs:element minOccurs="1" maxOccurs="1" name="ChargeEnabledTemp" xmlns:q5="http://microsoft.com/wsdl/types/" type="q5:char" />
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="BaseEntity">
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" name="Id" type="xs:long" />
</xs:sequence>
</xs:complexType>
</xs:schema>
Я ценю любую помощь.
Густаво