NHibernateを使用してクラスからデータベースを生成しようとしていますが、作成されているスキーマにクラスの列が含まれています。ほとんどの場合、これは問題ではありませんが、特に1つのクラスではこれが失敗する原因になります...注文クラス(注文はSQLで予約されたキーワードなので、おそらくキーワードではないのにそれは別の問題)だNHibernateがクラス名を持つスキーマをカラムとして生成するのはなぜですか?
次のマッピングファイル:
:<?xml version="1.0" encoding="utf-8" ?>
<class name="Order" table="Orders">
<id name="_persistenceID" column="ID" type="Guid" access="field" unsaved-value="00000000-0000-0000-0000-000000000000">
<generator class="guid.comb" />
</id>
<version name="_persistenceVersion" column="Version" access="field" type="int" unsaved-value="0" />
<property name="DateDeleted" column="DateDeleted" type="DateTime" />
<property name="ChangeReason" column="ChangeReason" type="String" not-null="true" />
<property name="CompletedDate" column="CompletedDate" type="DateTime" />
<property name="IsDeleted" column="IsDeleted" type="Boolean" />
<property name="Notes" column="Notes" type="String" />
<property name="OrderDate" column="OrderDate" type="DateTime" not-null="true" />
<property name="OrderTotal" column="OrderTotal" type="Decimal" />
<property name="RequiredDate" column="RequiredDate" type="DateTime" />
<many-to-one name="Customer" column="Customer" class="Customer" not-null="true" />
<bag name="OrderDetails" table="OrderDetails" generic="true" cascade="all">
<key column="OrderDetail" foreign-key="FK_OrderOrderDetails" />
<one-to-many class="OrderDetail" />
</bag>
</class>
には、以下のSQLを生成
create table Orders (
ID UNIQUEIDENTIFIER not null,
Version INT not null,
DateDeleted DATETIME null,
ChangeReason NVARCHAR(255) not null,
CompletedDate DATETIME null,
IsDeleted BIT null,
Notes NVARCHAR(255) null,
OrderDate DATETIME not null,
OrderTotal DECIMAL(19,5) null,
RequiredDate DATETIME null,
Customer UNIQUEIDENTIFIER not null,
Order UNIQUEIDENTIFIER null,
primary key (ID)
)
これは無効な問題の原因となっている2番目から最後の列(注文)です。私の他のすべてのクラスで起こっています - しかし、私は理由は分かりません。それについて私は何ができますか?
編集:30/11/2010 - マッピングファイルのもう一方の端:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="TheWorkshop.DomainModel" namespace="TheWorkshop.DomainModel" default-access="field.camelcase-underscore" default-lazy="true">
<class name="OrderDetail" table="OrderDetails">
<id name="_persistenceID" column="ID" type="Guid" access="field" unsaved-value="00000000-0000-0000-0000-000000000000">
<generator class="guid.comb" />
</id>
<version name="_persistenceVersion" column="Version" access="field" type="int" unsaved-value="0" />
<property name="AdjustedPrice" column="AdjustedPrice" type="Decimal" not-null="true" />
<property name="LineCost" column="LineCost" type="Decimal" not-null="true" />
<property name="Notes" column="Notes" type="String" />
<property name="Photo" column="Photo" type="String" />
<property name="Price" column="Price" type="Decimal" not-null="true" />
<property name="Quantity" column="Quantity" type="int" />
<many-to-one name="`Order`" column="`Order`" class="Order" not-null="true" />
<many-to-one name="Product" column="Product" class="Product" not-null="true" />
</class>
、それは以下を生成します。
create table OrderDetails (
ID UNIQUEIDENTIFIER not null,
Version INT not null,
AdjustedPrice DECIMAL(19,5) not null,
LineCost DECIMAL(19,5) not null,
Notes NVARCHAR(255) null,
Photo NVARCHAR(255) null,
Price DECIMAL(19,5) not null,
Quantity INT null,
[Order] UNIQUEIDENTIFIER not null,
Product UNIQUEIDENTIFIER not null,
primary key (ID)
)
どのNHのバージョンを使用していますか?あなたのhbm.xmlファイルは正常に見えます。何とか、別の列としてIDに加えて、Order列をPKとして作成しようとしているようです。 NH3を使用してこのhbm.xmlファイルを実行すると、PKとOrder列としてIDが正しく指定されます。このhbm.xmlファイルだけを別々に実行しようとしましたか? Orderクラスはどのように見えますか? (BTW - プロパティ名==列の場合は、列を指定する必要はありませんが、通常はデータ型も推測できますので、ほとんどの場合省略することができます) –
NH2.1.1.GAを使用しています idだけでhbmを実行しようとしましたが、それでもOrder列を追加しようとするとエラーがスローされます。それはすべて私の他entitesも同じだ - これはOrderDetailのために生成される例えば: は バージョンINT nullでないテーブルたOrderDetails( ID UNIQUEIDENTIFIER nullではないが、作成、nullでない AdjustedPrice DECIMAL(19.5)、 LineCost DECIMAL(19 nullでない、5)nullでない、 料金DECIMAL(19.5)NOT NULL、 数量INTヌル、 [オーダー] UNIQUEIDENTIFIER nullでない、 製品UNIQUEIDENTIFIER、 OrderDetail UNIQUEIDENTIFIERヌル、 主キー(ID) ) –
私はNH 3を実行しようと思ったが、まだ完全にリリースされたとは思わなかった? 私のプロパティ名の大半==列名 - hbmをより読みやすくすることができました。チップのおかげで hbmが正しいスキーマを生成すると、何が原因でファンキーなスキーマIどうやって? –