লিনকিউ দিয়ে এসকিউএল সংযোগে (এসকিউএল সার্ভার কমপ্যাক্ট সংস্করণের বিপরীতে) কয়েকটি বৈশিষ্ট্য আপডেট করার পরে ডেটা কনটেক্সটে সাবমিজচেঞ্জগুলি সম্পাদন করার সময় আমি একটি "সারি পাওয়া যায় নি বা পরিবর্তন হয়নি" get চেঞ্জক্লিক্লিটএক্সসেপশন।
var ctx = new Data.MobileServerDataDataContext(Common.DatabasePath);
var deviceSessionRecord = ctx.Sessions.First(sess => sess.SessionRecId == args.DeviceSessionId);
deviceSessionRecord.IsActive = false;
deviceSessionRecord.Disconnected = DateTime.Now;
ctx.SubmitChanges();
ক্যোয়ারীটি নিম্নলিখিত এসকিউএল উত্পন্ন করে:
UPDATE [Sessions]
SET [Is_Active] = @p0, [Disconnected] = @p1
WHERE 0 = 1
-- @p0: Input Boolean (Size = 0; Prec = 0; Scale = 0) [False]
-- @p1: Input DateTime (Size = 0; Prec = 0; Scale = 0) [9/4/2008 5:12:02 PM]
-- Context: SqlProvider(SqlCE) Model: AttributedMetaModel Build: 3.5.21022.8
স্পষ্ট সমস্যা হ'ল যেখানে 0 = 1 , রেকর্ডটি লোড হওয়ার পরে, আমি নিশ্চিত করেছি যে "ডিভাইসসেশনরেকর্ড" এর সমস্ত সম্পত্তি প্রাথমিক কীটি অন্তর্ভুক্ত করার জন্য সঠিক। এছাড়াও "চেঞ্জকনফ্লিক্ট এক্সপ্লেশন" ধরার সময় কেন এটি ব্যর্থ হয়েছে সে সম্পর্কে কোনও অতিরিক্ত তথ্য নেই। আমি এটিও নিশ্চিত করেছি যে এই ব্যতিক্রমটি ডাটাবেসে ঠিক একটি রেকর্ড দিয়ে ফেলেছে (যে রেকর্ডটি আমি আপডেট করার চেষ্টা করছি)
আশ্চর্যের বিষয়টি হ'ল কোডের বিভিন্ন বিভাগে আমার খুব অনুরূপ আপডেট স্টেটমেন্ট রয়েছে এবং এটি নিম্নলিখিত এসকিউএল উত্পন্ন করে এবং সত্যই আমার এসকিউএল সার্ভার কমপ্যাক্ট সংস্করণ ডেটাবেস আপডেট করে।
UPDATE [Sessions]
SET [Is_Active] = @p4, [Disconnected] = @p5
WHERE ([Session_RecId] = @p0) AND ([App_RecId] = @p1) AND ([Is_Active] = 1) AND ([Established] = @p2) AND ([Disconnected] IS NULL) AND ([Member_Id] IS NULL) AND ([Company_Id] IS NULL) AND ([Site] IS NULL) AND (NOT ([Is_Device] = 1)) AND ([Machine_Name] = @p3)
-- @p0: Input Guid (Size = 0; Prec = 0; Scale = 0) [0fbbee53-cf4c-4643-9045-e0a284ad131b]
-- @p1: Input Guid (Size = 0; Prec = 0; Scale = 0) [7a174954-dd18-406e-833d-8da650207d3d]
-- @p2: Input DateTime (Size = 0; Prec = 0; Scale = 0) [9/4/2008 5:20:50 PM]
-- @p3: Input String (Size = 0; Prec = 0; Scale = 0) [CWMOBILEDEV]
-- @p4: Input Boolean (Size = 0; Prec = 0; Scale = 0) [False]
-- @p5: Input DateTime (Size = 0; Prec = 0; Scale = 0) [9/4/2008 5:20:52 PM]
-- Context: SqlProvider(SqlCE) Model: AttributedMetaModel Build: 3.5.21022.8
আমি নিশ্চিত করেছি যে লাইনকিউ ক্লাস উত্পন্ন করে ডেটাবেস স্কিমা এবং ডিবিএমএল উভয়ই যথাযথ প্রাথমিক ক্ষেত্রের মানগুলি চিহ্নিত করা হয়েছে।
আমার ধারণা এটি প্রায় দুই অংশের প্রশ্ন:
- ব্যতিক্রম কেন নিক্ষেপ করা হচ্ছে?
- উত্পন্ন এসকিউএল-এর দ্বিতীয় সেটটি পর্যালোচনা করার পরে, বিরোধগুলি সনাক্ত করার মতো মনে হচ্ছে এটি সমস্ত ক্ষেত্রগুলি পরীক্ষা করে দেখতে ভাল লাগবে, তবে আমি ধারণা করি এটি মোটামুটি অকার্যকর হবে। এটি কি এভাবে সর্বদা কাজ করে? কেবলমাত্র প্রাথমিক কীটি পরীক্ষা করার জন্য কোনও সেটিংস রয়েছে?
আমি এই নিয়ে গত দুই ঘন্টা ধরে লড়াই করে যাচ্ছি যাতে কোনও সাহায্যের প্রশংসা হয়।