سؤال

محاولة تعيين حقل ثنائي على NULL يعطيني استثناء agbumentnull. يمكنني ضبط الحقل ليكون فارغًا مثل هذا new Binary(new byte[] {}); لكن هذا ليس مجرد عمود فارغ. هل هناك حل بديل باستخدام linqtoSql؟

هل كانت مفيدة؟

المحلول

لديك شيء آخر يحدث. لقد قمت للتو بإنشاء جدول عينة صغير مع معرف (هوية) ، فارس غير مألوف (MAX) ، varbinary غير القابل للفرق (MAX) ، والجداول الزمنية. استخدام الكود التالي يعمل بشكل جيد مع عدم وجود أخطاء.

using (var context = new TestDataContext())
{
    var binarySample = new BinarySample
    {
        Image = null,
        NonNullImage = new Binary( new byte[0] ),
    };
    context.BinarySamples.InsertOnSubmit( binarySample );
    context.SubmitChanges();
}

حيث يرمي هذا الرمز بشكل صحيح (ويمسك) sqlexception ، وليس engumentNullexception.

try
{
    using (var context = new TestDataContext())
    {
        var binarySample2 = new BinarySample
        {
            NonNullImage = null,
            Image = new Binary( new byte[0] )
        };
        context.BinarySamples.InsertOnSubmit( binarySample2 );
        context.SubmitChanges();
    }
}
catch (SqlException e)
{
    Console.WriteLine( e.Message );
}

هل من الممكن أن يكون لديك تطبيق فئة جزئي يحتوي على معالج sendPropertyChanging للعقار الذي يرمي engumentnullexception؟

تعديل: بناءً على تعليق البروتوكول الاختياري.

لاحظ أنه لا يمكنك تعيين متغير من النوع بايت [] إلى الثنائي مباشرة حيث يستدعي عملية التحويل الضمنية والتحويل الضمني سوف يرمي engumentnullexception. يجب عليك التحقق مما إذا كانت القيمة لاغية قبل محاولة تعيينها وببساطة تخصيص NULL إذا كان المتغير البايت [] فارغًا. بالنسبة لي هذا يبدو وكأنه سلوك غريب وآمل أن يغيروه في المستقبل. تشير وثائق MSDN إلى أن بعض التغيير قد يحدث في الإصدارات المستقبلية.

نصائح أخرى

هل أنت متأكد من أن الحقل غير قابل للإلغاء في قاعدة البيانات؟ هل تم تحديث نموذج بيانات LINQ وفقًا لذلك؟ إذا كنت تستخدم رسم الخرائط المستندة إلى السمة ، فيجب أن يكون هناك ملف CanBeNull=true الإعداد في [Column(...)] ينسب.

tvanfosson (تم نشره كإجابة للحصول على تنسيق أفضل للرمز)

نعم أنت على حق ، شيء غريب يحدث ، شيء يتجاوز معرفتي C#.

From.ImageThumbnail هو Byte [] to.imageThumbnail

باستخدام ؟ أو ؟؟ لن يعمل المشغلون ، إذا استخدمت فقط إذا كان يعمل ، غريبًا. لا أرى لماذا :-)

            if (from.ImageThumbnail != null) // works
            {
                to.ImageThumbnail = from.ImageThumbnail;
            }
            else
            {
                to.ImageThumbnail = null;
            }

            to.ImageThumbnail = from.ImageThumbnail != null ? from.ImageThumbnail : null; // fails

            to.ImageThumbnail = from.ImageThumbnail ?? null; // fails

يمكنك استخدام تنفيذ الاستعلام() طريقة لتمرير SQL الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top