NHibernate + Невозможно вставить значение NULL в - PullRequest
3 голосов
/ 27 января 2010

У меня есть база данных MS-SQL с таблицей, созданной с этим кодом

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

так что idPortfolioManager - мой первичный ключ, а также автоинкремент. Теперь в моем приложении Windows WPF я использую NHibernate, чтобы помочь с добавлением / обновлением / удалением / и т.д. данные из базы данных. Вот класс, который должен подключаться к таблице управления портфелем

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() {
    }
}
}

и некоторый короткий код, чтобы попытаться вставить что-то

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

Проблема в том, что, когда я пытаюсь запустить это, я получаю эту ошибку:

{System.Data.SqlClient.SqlException: невозможно вставить значение NULL в колонка 'idPortfolioManager', таблица 'PortfolioManagementSystem.dbo.portfoliomanager'; колонка не допускает нулевые значения. Вставить не удается. Заявление было прекращено ...

с внешним исключением

{"не удалось вставить: [PortfolioManager.PortfolioManagerClass] [SQL: ВСТАВИТЬ В Портфолио менеджер (имя) ЗНАЧЕНИЯ (?); выберите SCOPE_IDENTITY ()] "}

Я надеюсь, что это последняя ошибка, которую мне придется исправить с помощью NHibernate, просто чтобы заставить ее что-то сделать, это был долгий процесс. Как примечание, я также попытался установить Class = "native" и unsaved-value = "0" с той же ошибкой. Спасибо!

Edit:

Хорошо, удаление 1 из Generator фактически позволяет программе запускаться (не уверен, почему это было даже в примерах, которые я просматривал), но на самом деле она не добавляется в базу данных. Я вошел в систему на сервере и запустил средство профилирования сервера sql, и я никогда не видел, как проходит соединение или SQL пытается его запустить, но NHibernate больше не выдает ошибку. Начинаю думать, что было бы проще просто написать операторы SQL: (

1 Ответ

0 голосов
/ 28 января 2010

Только к вашему сведению, вы должны взглянуть на Свободный NHibernate . Это существенно уменьшит количество головных болей, которые вы будете испытывать при реализации большинства отображений NHibernate.

...