J'essaie de générer ma base de données à partir de classes utilisant NHibernate, mais le schéma en cours de création contient une colonne pour la classe. Pour la plupart, cela n'a pas d'importance, mais une classe en particulier provoque l'échec ... ma classe Order (parce que order est un mot-clé réservé dans SQL - oui peut-être que j'aurais dû utiliser un mot qui n'était pas un mot-clé mais c'est une autre question)Pourquoi NHibernate génère-t-il un schéma avec le nom de la classe en tant que colonne?
le fichier de mappage suivant:
<?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>
produit l'instruction SQL suivante:
Cette dernière colonne (Order) est à l'origine de cette erreur et a mis en évidence le problème. Ça se passe dans toutes mes autres classes - mais je ne sais pas pourquoi. Que puis-je faire à ce sujet?
Edit: 30/11/2010 - L'autre extrémité du fichier de mise en correspondance:
<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>
et qui génère le texte suivant:
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)
)
Quelle version de NH utilisez-vous? Vos fichiers hbm.xml ont l'air bien. D'une certaine manière, il semble essayer de créer une colonne Order en tant que PK en plus de l'ID en tant que colonne séparée. Lorsque j'exécute ce fichier hbm.xml à l'aide de NH3, il spécifie correctement l'ID en tant que colonne PK et no Order. Avez-vous essayé d'exécuter ce fichier hbm.xml séparément? À quoi ressemble votre classe de commande. (BTW - Si le nom de la propriété == colonne, vous n'avez pas à spécifier la colonne.En outre, les types de données peuvent généralement être déduits.Vous pouvez donc les omettre dans la plupart des cas.) –
J'utilise NH2.1.1.GA J'ai essayé d'exécuter le hbm avec juste l'ID et il jette toujours l'erreur, en essayant d'ajouter la colonne Ordre. Il en va de même pour tous mes autres ENTITES - par exemple ceci est généré pour OrderDetail: créer OrderDetails de table ( ID UNIQUEIDENTIFIER non nul, Version INT non null, AdjustedPrice DECIMAL (19,5) non nul, LineCost DECIMAL (19 , 5) non nulle, Prix DECIMAL (19,5) non null, null Quantité INT, [Ordre] UNIQUEIDENTIFIER non nulle, produit UNIQUEIDENTIFIER non null, null OrderDetail UNIQUEIDENTIFIER, clé primaire (ID) ) –
Je ne pouvais pas essayer NH3, mais je ne pensais pas qu'il était encore disponible? La plupart de mes noms de propriété == noms de colonnes - Je pourrais rendre le hbm plus lisible, merci pour le conseil :) Si le hbm génère le schéma correct pour vous ... ce qui pourrait l'amener à générer le schéma génial I J'obtiens? –