使用Active Record在Subsonic 3中保存记录

时间:2010-03-09 23:33:56

标签: subsonic subsonic3 subsonic-active-record

我在使用Active记录保存Subsonic 3中的记录时遇到问题。我使用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();
        }

带有以下消息:需要指定值或要插入的Select查询 - 无法继续!在以下行repo.Add(this,provider);我的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

2 个答案:

答案 0 :(得分:2)

你看到的选择错误是SubSonic尝试拔出新创建的PK,但它不能。因此,请确保为您的表定义了主键。下一步 - 确保将其设置为自动增量:)。

如果没有这样做 - 启动SQL事件探查器,看看发生了什么。另外 - 如果您可以将表格的架构放在这里,以便我可以看到它,这将有所帮助(只需编辑您的消息)。

答案 1 :(得分:0)

这应该通常有用。

我想到了一些可能的失败点:

  • 您使用的是标准MSSQL提供程序(数据库)吗?
  • 您是否在web.config(网站)或app.config(类库项目)中提供了连接字符串?
  • 您是否在数据库中设置了主键列?
  • 您的桌子是否使用多个主键列?亚音速无法处理。在这种情况下,使用单个人工ID列(uniqueidentifier或int)。
  • 如果主键值是整数字段:是否自动增加id值?否则,您必须在保存之前在电子邮件对象上设置主键值。
相关问题