ما الذي يمكن أن يتسبب في عدم العمل في DB.Submitchanges () في LINQ إلى SQL؟

StackOverflow https://stackoverflow.com/questions/1579033

  •  21-09-2019
  •  | 
  •  

سؤال

لقد قمت بإعداد مثال بسيط للغاية مع LINQ إلى SQL في WPF.

يمكنني الحصول على هدف (PageItem) مثل هذا ويمكنني تغيير منشأه وعندما أتصل أرسل التغييرات() هذا يعطيني لا خطأ لكن ذلك لا ينقذ التغيير.

MainDataContext db = new MainDataContext();
var pageItem = (from p in db.PageItems
              where p.Id == 1
              select p).SingleOrDefault();

pageItem.Title = "changed";
db.SubmitChanges();

ما الذي يمكن أن يتسبب في عدم تقديم التغييرات الفرعية؟

مزيد من المعلومات:

هذا لا يعمل أيضًا ، حتى db.executecommand لا يعمل ، وغرابة عندما لا يخطئ تصحيح F11 إلى submitchanges () أو التنفيذي () ، لماذا لا يمكنني التدخل في هؤلاء؟

using (var db = new MainDataContext())
{
    var pageItem = (from p in db.PageItems
                    where p.Id == 1
                    select p).SingleOrDefault();

    pageItem.Title = "changed";
    db.SubmitChanges();

    db.ExecuteCommand("INSERT INTO PageItems (Title) VALUES ('this is the title')");


    if (pageItem != null)
        MainContent.Children.Add(new QuickForm(pageItem));

}

مزيد من المعلومات:

db.log = console.out يعطيني هذا:

SELECT [t0].[Id], [t0].[IdCode], [t0].[Title], [t0].[Description], [t0].[DisplayOrder]
FROM [dbo].[PageItems] AS [t0]
WHERE [t0].[Id] = @p0
'TestPageManager23434.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\PresentationFramework.resources\3.0.0.0_de_31bf3856ad364e35\PresentationFramework.resources.dll'
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [1]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1

INSERT INTO PageItems (Title) VALUES ('this is the title')
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1

The thread 0x1190 has exited with code 0 (0x0).

إجابه

كان الحل ثلاثة أضعاف:

  • كنت أغير قاعدة بيانات مختلفة عما كنت أنظر إليه في Visual Studio ، الحل:

    var db = new MainDataContext (@"c: user testuser documents visual studio 2008 projects testpagemanager23434 testPagemanager23434 data main.mdf")))

  • جعل هذا التحديث العمل ولكن ليس submitchanges () ، كان الحل هو تعيين المفتاح الأساسي.

  • ما زال لم يكن يعرض جميع chagnes ، كانت المشكلة لدي عدد من Windows "عرض البيانات" المفتوحة التي لم يتم تحديثها

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

المحلول

يمكن أن يحدث هذا إذا لم يكن لديك مفتاح أساسي محدد على الجداول في SQL Server

نصائح أخرى

لسبب ما قد لا يكون السياق تتبع التغييرات. جرب الأسلاك الخاصة بك db.Log إلى كاتب وتفقد ما تفعله LINQ-> SQL عند الاتصال SubmitChanges()..

db.Log = Console.Out;

ثم يمكنك مشاهدة نافذة الإخراج الخاصة بك تعمل في التصحيح ومعرفة ما يجري.

هل تستخدم ملف SQL Expression MDF؟

هناك مقالة - سلعة حول كيفية حصولك على نسخة من الملف وليس الأصلي ، مما تسبب في الأعراض التي تصفها.

FTA:

أعتقد أن نظام المشروع أو معالج Explorer Explorer يقدم "نسخ" MDF إلى دليل المشروع الخاص بك. ربما تعمل على نسخة من قاعدة البيانات وعرض الآخر في مستكشف الخادم.

واجهت نفس المشكلة التي سجل فيها السجل في قاعدة البيانات لم أراه في مشروعي لم يتم تعديله بواسطة SubmitChanges طريقة.

بعد الكثير من التجارب والأبحاث اكتشفت أن النظام وضع نسخة أخرى من قاعدة البيانات Northwnd.mdf في دليل الجذر للمشروع \Bin\Debug\Northwnd.mdf. هذا هو المكان الذي حدثت فيه التغييرات بشكل مثالي.

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