سؤال

أواجه مشكلة في توفير سجل في 10. باستخدام سجل نشط. لقد قمت بإنشاء كائناتي باستخدام DALS و 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 (مشروع مكتبة فئة)؟
  • هل قمت بتعيين عمود رئيسي أساسي في قاعدة البيانات؟
  • هل طاولتك باستخدام أعمدة أساسية متعددة أساسية؟ الخلقية لا يمكن التعامل مع ذلك. استخدم عمود معرف اصطناعي واحد (UniqueDideDifier أو Int) في هذه الحالة.
  • إذا كانت قيمة المفتاح الأساسية حقل عدد صحيح: هل يزيد من التلقائي قيم الهوية؟ وإلا فستضطر إلى تعيين قيمة المفتاح الأساسي على كائن بريدك الإلكتروني قبل حفظه.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top