Сохранение записей в до Sumponic 3 с использованием активной записи

StackOverflow https://stackoverflow.com/questions/2413446

Вопрос

У меня проблемы с сохранением записей в до Sumponic 3 с использованием активной записи. Я сгенерировал свои объекты, используя далы и TTS, и все кажется в порядке, потому что следующий тест проходит. Я думаю, что моя строка подключения верна, или поколение не удалось.

[Test]
        public void TestSavingAnEmail()
        {
            Email testEmail = new Email();
            testEmail.EmailAddress = "newemail@test.com";
            testEmail.Subscribed = true;
            testEmail.Save();
            Assert.AreEqual(1, Email.All().Count());
        }

С другой стороны, следующий код выходит из строя:

protected void btEmailSubmit_Click(object sender, EventArgs e)
        {
            Email email = new Email();
            email.EmailAddress = txtEmail.Text;
            email.Subscribed = chkSubscribe.Checked;
            email.Save();
        }

С сообщением: необходимо указать значения или запрос SELECT для вставки - не могу продолжить! На следующей строке repo.add (это, поставщик); Линия в моей Activerecord.cs:

public void Add(IDataProvider provider){


            var key=KeyValue();
            if(key==null){
                var newKey=_repo.Add(this,provider);
                this.SetKeyValue(newKey);
            }else{
                _repo.Add(this,provider);
            }
            SetIsNew(false);
            OnSaved();
        }

Я делаю здесь что -то ужасно не так? Методы «Сохранить и добавить» имеют необразные перегрузки, которые, по моему мнению, были безопасны в использовании. Мне нужно пройти поставщика? Я гуглил это некоторое время и не смог придумать что -то конкретное для моей ситуации. Заранее спасибо за любой ответ.

Схема для таблицы:

USE [xxxx]
GO
/****** Object:  Table [dbo].[Emails]    Script Date: 03/11/2010 13:15:08 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Emails](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [V_EmailAddress] [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
    [B_Subscribed] [bit] NOT NULL,
    [DT_CreatedOn] [datetime] NOT NULL,
    [DT_ModifiedOn] [datetime] NOT NULL,
 CONSTRAINT [PK_Emails] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
SET ANSI_PADDING OFF

Во время поколения есть только 1 предупреждение, и это

Multiple template directives were found in the template. All but the first one will be ignored. Multiple parameters to the template directive should be specified within one template directive.

Настройки

Это было полезно?

Решение

Ошибка выбора, которую вы видите, является дозвуковой, пытающейся вытащить недавно созданный PK, и это не может. Итак, убедитесь, что у вас есть первичный ключ, определенный для вашей таблицы. Далее - убедитесь, что он настроен на автоматический приращение :).

Если это не сделает этого - начните SQL Profiler и посмотрите, что происходит. Кроме того - если бы вы могли поместить схему своего стола здесь, чтобы я мог ее увидеть, это было бы полезно (просто отредактируйте свое сообщение).

Другие советы

Это должно работать.

Несколько возможных моментов неудачи приходят мне на голову:

  • Вы используете стандартный поставщик MSSQL (база данных)?
  • Предоставили ли вы строку подключения в web.config (веб -сайт) или App.config (Class Library Project)?
  • Вы установили столбец первичного ключа в базе данных?
  • Ваша таблица использует несколько столбцов первичного ключа? Суммонка не может справиться с этим. Используйте одну колонку искусственного идентификатора (уникальный идентификатор или Int) в этом случае.
  • Если значение первичного ключа является целочисленным полем: автоматически он включает значения идентификатора? В противном случае вам придется установить значение первичного ключа в вашем объекте электронной почты перед его сохранением.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top