У меня проблемы с сохранением записи в Subsonic 3 с использованием Active record. Я сгенерировал свои объекты, используя DAL и 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();
}
с сообщением: Нужно указать значения или выбрать запрос для вставки - не может продолжаться! в следующей строке repo.Add (this, провайдер); строка в моем 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();
}
Я что-то здесь не так делаю? Методы save и add имеют беспараметрические перегрузки, которые я считаю безопасными для использования. Нужно ли передавать провайдера? Я некоторое время гуглил по этому поводу и не смог придумать что-то конкретное для моей ситуации. Заранее спасибо за любой ответ.
Схема для таблицы:
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.
Settings.ttinclude