문제

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();
        }

다음 메시지와 함께:삽입하려면 값 또는 선택 쿼리를 지정해야 합니다. 계속할 수 없습니다!다음 줄 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();
        }

내가 여기서 뭔가 끔찍한 일을 하고 있는 걸까?저장 및 추가 메소드에는 사용하기에 안전하다고 생각되는 매개변수 없는 오버로드가 있습니다.공급자를 통과해야 합니까?나는 이것에 대해 한동안 검색해 보았지만 내 상황과 관련된 구체적인 내용을 찾을 수 없었습니다.어떤 종류의 답변이라도 미리 감사드립니다.

테이블의 스키마는 다음과 같습니다.

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.

설정.ttinclude

도움이 되었습니까?

해결책

당신이보고있는 선택 오류는 새로 만들어진 PK를 꺼내려고하는 subsonic입니다. 따라서 테이블에 대한 기본 키가 정의되어 있는지 확인하십시오. 다음 - 자동 증분으로 설정되어 있는지 확인하십시오 :).

그렇지 않으면 SQL 프로파일 러를 시작하고 무슨 일이 일어나고 있는지 확인하십시오. 또한 - 테이블 스키마를 여기에 넣을 수 있도록 여기에 볼 수 있다면 도움이 될 것입니다 (메시지 편집 만하면).

다른 팁

이것은 일반적으로 작동합니다.

몇 가지 가능한 실패 지점이 떠오릅니다.

  • 표준 MSSQL 공급자(데이터베이스)를 사용하고 있습니까?
  • web.config(웹사이트) 또는 app.config(클래스 라이브러리 프로젝트)에 연결 문자열을 제공했습니까?
  • 데이터베이스에 기본 키 열을 설정하셨나요?
  • 테이블이 여러 기본 키 열을 사용하고 있나요?서브소닉은 그걸 감당할 수 없어요.이 경우 단일 인공 ID 열(uniqueidentifier 또는 int)을 사용하십시오.
  • 기본 키 값이 정수 필드인 경우:ID 값이 자동으로 증가합니까?그렇지 않으면 저장하기 전에 이메일 객체에 기본 키 값을 설정해야 합니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top