我使用Active Record在亚音速3中保存记录时遇到了麻烦。我使用dals and 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(此,提供商);我的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.

settings.ttinclude

有帮助吗?

解决方案

您看到的选择错误是亚音速试图拉出新创建的PK,但不能。因此,请确保您的桌子定义了一个主键。接下来 - 确保将其设置为自动增量:)。

如果不这样做 - 踢出SQL Profiler,看看发生了什么。另外 - 如果您可以将表格的架构放在此处,以便我可以看到,那将是有帮助的(只需编辑您的消息)。

其他提示

这通常应该起作用。

我想到了一些失败点:

  • 您是否使用标准MSSQL提供商(数据库)?
  • 您是否在web.config(网站)或app.config(类库项目)中提供了连接字符串?
  • 您是否在数据库中设置了主键列?
  • 您的表是否使用多个主键列?亚音速无法处理。在这种情况下,请使用单个人造ID列(唯一识别符或int)。
  • 如果主要钥匙值是整数字段:它是否自动添加ID值?否则,在保存电子邮件对象之前,您必须在电子邮件对象上设置主要键值。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top