从映射C#.cs文件或NHibernate.hbm.xml文件创建DataSet.XSD的工具或方法?
我需要根据NHibernate.hbm.xml文件或类文件创建DataSet.xsd文件。这些是映射文件和类文件,而不是我们用来处理数据库的文件 您可能会问我,为什么需要从Nhibernate.hbm.xml文件或.cs文件生成数据集文件 这是因为我们使用的是Crystal Reports,我们使用的是框架、MVVM、INotifyPropertyChanged、NHibernate,在大量研究之后,对于我们的例子来说,如果我们在程序执行时转换对象并使用它生成报告会更好。如果这个工具存在,它将变得更容易,因为我们的数据库中每个表有60到70列。因为我们已经在项目中使用了所有这些组件,所以如果我们开始使用sql查询来生成报告就没有意义了 此工具或“创建此数据集文件的方法”需要以以下格式读取这些文件: Nhibernate.hbm.xml文件:从映射C#.cs文件或NHibernate.hbm.xml文件创建DataSet.XSD的工具或方法?,nhibernate,crystal-reports,xsd,dataset,Nhibernate,Crystal Reports,Xsd,Dataset,我需要根据NHibernate.hbm.xml文件或类文件创建DataSet.xsd文件。这些是映射文件和类文件,而不是我们用来处理数据库的文件 您可能会问我,为什么需要从Nhibernate.hbm.xml文件或.cs文件生成数据集文件 这是因为我们使用的是Crystal Reports,我们使用的是框架、MVVM、INotifyPropertyChanged、NHibernate,在大量研究之后,对于我们的例子来说,如果我们在程序执行时转换对象并使用它生成报告会更好。如果这个工具存在,它将变
<?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>
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;
}
}
我知道这是一个非常具体的案例,但如果你能至少向我们展示一种方式,那将是非常有帮助的
致以最良好的祝愿
古斯塔沃
编辑:
<?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>
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;
}
}
找到了一种方法:使用Visual Studio的内部工具XSD.EXE,我从程序集中提取了映射:
C:\>xsd / c /l:CS -t:Furnace <MyAssembly>.dll -o:"D:\Temp"
导致这些错误的原因:
D:\Temp>xsd/c schema0.xsd
Microsoft(R)Xml架构/数据类型支持实用程序
[Microsoft(R).NET Framework,版本4.0.30319.1]
版权所有(C)微软公司。版权所有
架构验证警告:未声明类型“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>
谢谢你的帮助
Gustavo您缺少一个XSD文件 更新:假设您使用的是xsd.exe。在本例中,修改import语句如下(我将此文件称为XSD-1.XSD): 您应该得到一个XSD-1.cs文件和一些警告 如果要使用svcutil,必须使用XSD-2.XSD,否则它将无法工作;另外,从好的方面来说,您不必修改XSD-1.XSD:
<xs:import namespace="http://microsoft.com/wsdl/types/" schemaLocation="XSD-2.xsd" />
svcutil XSD-1.xsd XSD-2.xsd /dconly
它工作正常,没有任何错误。我正在运行v4。您好,我已经做了更改,但仍然会出现这些错误,我也在使用那个XSD文件。使用svcutil.exe进行了尝试,结果是一样的..我刚刚尝试过,使用xsd.exe效果很好;它给出5个警告,但代码生成正常。我将用详细信息更新回复(我将停止发布生成的C#文件)。。。它生成类。问题是当我尝试使用/d参数生成数据集文件时。告诉我:错误:处理“schema0.xsd”时出错为数据集“”生成代码时出错无法将输入xml文件内容转换为数据集。未声明类型“t.com/wsdl/types/:char”。-未声明类型“”。那是因为煤焦问题。该文件生成的结果很好,除了/d参数不能生成DataSetI,我刚刚尝试了xsd-xsd-1.xsd/d,它成功地生成了代码;确保你使用的是我发布的XSD-1.XSD,只有他能工作。将他与我的schema.XSD一起使用不会产生任何效果。使用以下语法:C:\>xsd/cschema.xsd CHAR.xsd CHAR.xsd是您发布的补充文件。
svcutil XSD-1.xsd XSD-2.xsd /dconly