У меня есть база данных 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: (