2010-01-27 8 views
3

J'ai une base de données MS-SQL avec une table créée avec ce codeNHibernate + Impossible d'insérer la valeur NULL dans

CREATE TABLE [dbo].[portfoliomanager](
[idPortfolioManager] [int] NOT NULL PRIMARY KEY IDENTITY, 
[name] [varchar](45) NULL 
) 

afin que idPortfolioManager est ma clé primaire et aussi auto-incrémentée. Maintenant, sur mon application Windows WPF, j'utilise NHibernate pour aider à ajouter/mettre à jour/supprimer/etc. données de la base de données. Voici la classe qui doit être connecté à la table gérant de portefeuille

namespace PortfolioManager 
{ 
[Class(Table="portfoliomanager",NameType=typeof(PortfolioManagerClass))] 
public class PortfolioManagerClass { 

    [Id(Name = "idPortfolioManager")] 
    [Generator(1, Class = "identity")] 
    public virtual int idPortfolioManager { get; set; } 

    [NHibernate.Mapping.Attributes.Property(Name = "name")] 
    public virtual string name { get; set; } 

    public PortfolioManagerClass() { 
    } 
} 
} 

et un code court pour essayer d'insérer quelque chose

PortfolioManagerClass portfolio = new PortfolioManagerClass(); 
Portfolio.name = "Brad's Portfolios"; 

Le problème est, lorsque je tente d'exécuter ce, je reçois cette erreur:

{System.Data.SqlClient.SqlException: Cannot insert the value NULL into column 'idPortfolioManager', table 'PortfolioManagementSystem.dbo.portfoliomanager'; column does not allow nulls. INSERT fails. The statement has been terminated...

avec une exception extérieure de

{"could not insert: [PortfolioManager.PortfolioManagerClass][SQL: INSERT INTO portfoliomanager (name) VALUES (?); select SCOPE_IDENTITY()]"}

J'espère que c'est la dernière erreur que je vais devoir résoudre avec NHibernate juste pour l'amener à faire quelque chose, ça a été un long processus. Juste comme une note, j'ai également essayé de placer Class = "native" et unsaved-value = "0" avec la même erreur. Merci!

Edit:

Ok enlever le 1, du générateur permet en fait le programme à exécuter (ne sais pas pourquoi il en était même dans les échantillons que je regardais), mais il ne fait pas encore ajouté à me la base de données. Je me suis connecté au serveur et j'ai lancé l'outil de profilage du serveur sql et je n'ai jamais vu la connexion arriver ni le SQL essayer de s'exécuter, mais NHibernate ne génère plus d'erreur. À partir de penser qu'il serait plus facile d'écrire que des instructions SQL moi-même :(

+0

Après 8 mois d'utilisation de NHibernate Nhibernate et Fluent, je parviens à la même conclusion: NH est un excellent choix pour la sélection dans la base de données, mais il ne faut pas perdre trop de temps à essayer de déboguer les erreurs. Instruction SQL – modernzombie

Répondre

-1

Juste Pour votre information, vous devriez jeter un oeil à Fluent NHibernate. Il permettra de réduire considérablement la quantité de maux de tête, vous aurez la mise en œuvre la plupart des applications NHibernate.

+0

Cela devrait être un commentaire, pas une réponse. –

Questions connexes