SQL सर्वर कॉम्पैक्ट संस्करण डेटाबेस पर LINQ में SQL में "पंक्ति नहीं मिली या बदली गई" को हल करने के लिए मैं क्या कर सकता हूं?


96

LINQ से SQL कनेक्शन (SQL सर्वर कॉम्पेक्ट एडिशन के खिलाफ) के साथ एक जोड़े के गुणों को अपडेट करने के बाद DataContext को SubmitChanges निष्पादित करते समय मुझे "पंक्ति नहीं मिली या परिवर्तित नहीं हुई।" ChangeConflictException।

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

क्वेरी निम्न SQL उत्पन्न करता है:

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

स्पष्ट समस्या WHERE 0 = 1 है , रिकॉर्ड लोड होने के बाद, मैंने पुष्टि की है कि "deviceSessionRecord" में सभी गुण प्राथमिक कुंजी को शामिल करने के लिए सही हैं। "ChangeConflictException" को पकड़ने पर भी, इस बारे में कोई अतिरिक्त जानकारी नहीं है कि यह विफल क्यों हुआ। मैंने यह भी पुष्टि की है कि इस अपवाद को डेटाबेस में ठीक एक रिकॉर्ड के साथ फेंक दिया गया है (जिस रिकॉर्ड को मैं अपडेट करने का प्रयास कर रहा हूं)

यह अजीब है कि कोड के एक अलग अनुभाग में मेरे पास एक समान अपडेट स्टेटमेंट है और यह निम्न एसक्यूएल उत्पन्न करता है और वास्तव में मेरे एसक्यूएल सर्वर कॉम्पैक्ट संस्करण डेटाबेस को अपडेट करता है।

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

मैंने पुष्टि की है कि LINQ क्लासेस बनाने वाले डेटाबेस स्कीमा और DBML दोनों में उचित प्राथमिक फ़ील्ड मानों की पहचान की गई है।

मुझे लगता है कि यह लगभग एक दो हिस्सा सवाल है:

  1. अपवाद क्यों फेंका जा रहा है?
  2. उत्पन्न SQL के दूसरे सेट की समीक्षा करने के बाद, ऐसा लगता है कि संघर्ष का पता लगाने के लिए सभी क्षेत्रों की जांच करना अच्छा होगा, लेकिन मुझे लगता है कि यह काफी अक्षम होगा। क्या इस तरह से यह हमेशा काम करता है? क्या प्राथमिक कुंजी की जांच करने के लिए एक सेटिंग है?

मैं पिछले दो घंटों से इससे लड़ रहा हूं इसलिए किसी भी मदद की सराहना की जाएगी।


एफडब्ल्यूआईडब्ल्यू: मुझे यह त्रुटि तब हो रही थी जब अनजाने में विधि को दो बार कॉल किया गया था। यह दूसरी कॉल पर होता।
क्रिस

उत्कृष्ट पृष्ठभूमि की जानकारी c-sharpcorner.com/article/…
CAK2

जवाबों:


189

यह बुरा है, लेकिन सरल:

जांचें कि O / R-Designer में सभी फ़ील्ड के डेटा प्रकार आपकी SQL तालिका में डेटा प्रकारों से मेल खाते हैं या नहीं। अशक्त के लिए डबल चेक! एक स्तंभ O / R-Designer और SQL दोनों में या तो अशक्त होना चाहिए, या दोनों में अशक्त नहीं होना चाहिए।

उदाहरण के लिए, एक NVARCHAR कॉलम "शीर्षक" आपके डेटाबेस में NULLable के रूप में चिह्नित है, और इसमें NULL का मान है। भले ही कॉलम आपके O / R- मैपिंग में NULLable के रूप में चिह्नित नहीं है, फिर भी LINQ इसे सफलतापूर्वक लोड करेगा और कॉलम-स्ट्रिंग को अशक्त करने के लिए सेट करेगा।

  • अब आप कुछ बदलें और SubmitChanges () को कॉल करें।
  • LINQ एक SQL क्वेरी जनरेट करेगा जिसमें "WHERE [शीर्षक] IS NULL" होगा, यह सुनिश्चित करने के लिए कि शीर्षक किसी और द्वारा नहीं बदला गया है।
  • LINQ मैपिंग में [शीर्षक] के गुणों को देखता है।
  • LINQ मिलेगा [शीर्षक] नहीं पूर्ण।
  • चूँकि [शीर्षक] तर्कहीन नहीं है, तर्क से यह कभी भी पूर्ण नहीं हो सकता है!
  • तो, क्वेरी को अनुकूलित करते हुए, LINQ इसे "जहाँ 0 = 1" के साथ बदल देता है, "कभी नहीं" के SQL समकक्ष।

जब फ़ील्ड के डेटा प्रकार SQL में डेटा प्रकार से मेल नहीं खाते, या यदि फ़ील्ड अनुपलब्ध हैं, तो समान लक्षण दिखाई देगा, क्योंकि LINQ यह सुनिश्चित करने में सक्षम नहीं होगा कि डेटा पढ़ने के बाद SQL डेटा परिवर्तित नहीं हुआ है।


4
मेरे पास एक समान था - भले ही थोड़ा अलग - समस्या हो, और आपकी सलाह के लिए डबल चेक करने की सलाह देने से मेरा दिन बच गया! मैं पहले से ही गंजा था, लेकिन इस मुद्दे ने मुझे एक और सिर के बालों की कीमत निश्चित रूप से दी होती अगर मैं एक होता .. धन्यवाद!
रौन जैकबसेन

7
सुनिश्चित करें कि आपने गुण विंडो में 'अशक्त' गुण को True पर सेट किया है। मैं 'सर्वर डेटा प्रकार की संपत्ति का संपादन किया गया था, से इसे बदलने VARCHAR(MAX) NOT NULLके लिए VARCHAR(MAX) NULLऔर यह काम करने की उम्मीद। बहुत ही साधारण सी गलती।

इसे उभारना था। इसने मुझे एक टन समय बचाया। मेरे अलगाव के स्तर को देख रहा था क्योंकि मुझे लगा था कि यह एक निर्णायक मुद्दा है
एड्रियन

3
मैंने NUMERIC(12,8)एक Decimalसंपत्ति के लिए एक कॉलम मैप किया था । मुझे कॉलम की विशेषता में डीबीटाइप को सटीक करना था [Column(DbType="numeric(12,8)")] public decimal? MyProperty ...
कॉस्टो

3
समस्या क्षेत्रों / स्तंभों की पहचान करने का एक तरीका यह है कि आप अपने वर्तमान Linq-to-SQL निकाय वर्गों को, .bbml फ़ाइल में, एक अलग फ़ाइल में सहेजें। फिर, अपने वर्तमान मॉडल को हटा दें और इसे डेटाबेस (वीएस का उपयोग करके) से पुनर्जीवित करें, जो एक नई .dbml फ़ाइल उत्पन्न करेगा। फिर, समस्या अंतर का पता लगाने के लिए, दो .dbml फ़ाइलों पर WinMerge या WinDiff जैसे एक तुलनित्र चलाएं।
david.barkhuizen 10

24

सबसे पहले, यह जानना उपयोगी है कि समस्या क्या है। Googling समाधान में मदद करनी चाहिए, आप संघर्ष को हल करने के लिए बेहतर समाधान खोजने के लिए संघर्ष के बारे में विवरण (तालिका, स्तंभ, पुराना मूल्य, नया मूल्य) लॉग कर सकते हैं:

public class ChangeConflictExceptionWithDetails : ChangeConflictException
{
    public ChangeConflictExceptionWithDetails(ChangeConflictException inner, DataContext context)
        : base(inner.Message + " " + GetChangeConflictExceptionDetailString(context))
    {
    }

    /// <summary>
    /// Code from following link
    /// https://ittecture.wordpress.com/2008/10/17/tip-of-the-day-3/
    /// </summary>
    /// <param name="context"></param>
    /// <returns></returns>
    static string GetChangeConflictExceptionDetailString(DataContext context)
    {
        StringBuilder sb = new StringBuilder();

        foreach (ObjectChangeConflict changeConflict in context.ChangeConflicts)
        {
            System.Data.Linq.Mapping.MetaTable metatable = context.Mapping.GetTable(changeConflict.Object.GetType());

            sb.AppendFormat("Table name: {0}", metatable.TableName);
            sb.AppendLine();

            foreach (MemberChangeConflict col in changeConflict.MemberConflicts)
            {
                sb.AppendFormat("Column name : {0}", col.Member.Name);
                sb.AppendLine();
                sb.AppendFormat("Original value : {0}", col.OriginalValue.ToString());
                sb.AppendLine();
                sb.AppendFormat("Current value : {0}", col.CurrentValue.ToString());
                sb.AppendLine();
                sb.AppendFormat("Database value : {0}", col.DatabaseValue.ToString());
                sb.AppendLine();
                sb.AppendLine();
            }
        }

        return sb.ToString();
    }
}

अपने sumbitChanges को लपेटने के लिए सहायक बनाएं:

public static class DataContextExtensions
{
    public static void SubmitChangesWithDetailException(this DataContext dataContext)
    {   
        try
        {         
            dataContext.SubmitChanges();
        }
        catch (ChangeConflictException ex)
        {
            throw new ChangeConflictExceptionWithDetails(ex, dataContext);
        }           
    }
}

और फिर सबमिट परिवर्तन कोड को कॉल करें:

Datamodel.SubmitChangesWithDetailException();

अंत में, अपने वैश्विक अपवाद हैंडलर में अपवाद लॉग इन करें:

protected void Application_Error(object sender, EventArgs e)
{         
    Exception ex = Server.GetLastError();
    //TODO
}

3
शानदार समाधान! मेरे पास एक मेज है जिसमें लगभग 80 फ़ील्ड हैं, और टेबल पर कई ट्रिगर हैं जो आवेषण और अपडेट के दौरान विभिन्न फ़ील्ड्स को अपडेट कर रहे हैं। मुझे यह त्रुटि तब मिल रही थी जब L2S का उपयोग करते हुए डेटाकोटेक्स्ट को अपडेट कर रहा था, लेकिन यह सुनिश्चित था कि यह एक ट्रिगर्स द्वारा फ़ील्ड को अपडेट करने के कारण हो रहा था, इस प्रकार डेटा संदर्भ तालिका में डेटा से अलग हो सकता है। आपके कोड ने मुझे यह देखने में मदद की कि कौन सा फ़ील्ड तालिका के साथ डेटा सन्दर्भ से बाहर हो रहा है। अनेक अनेक धन्यवाद!!
जगदीश

1
यह बड़ी तालिकाओं के लिए एक महान समाधान है। Nulls को संभालने के लिए, 'col.XValue.ToString ()' को 'col.XValue ==ull' में बदलें। "null": col.XValue.ToString () प्रत्येक तीन मान फ़ील्ड के लिए।
हम्बड्स 18

ओरिजिनलवैल्यू, करंटवैल्यू और डेटाबेसवैल्यू को कड़े करते हुए शून्य संदर्भों की रक्षा करने पर डिट्टो।
19yd में फ्लोयड कोश

16

DataContext पर एक तरीका है जिसे Refresh कहा जाता है जो यहां मदद कर सकता है। यह आपको परिवर्तनों को सबमिट करने से पहले डेटाबेस रिकॉर्ड को फिर से लोड करने की अनुमति देता है, और यह निर्धारित करने के लिए कि कौन से मान रखने के लिए विभिन्न मोड प्रदान करता है। "KeepChanges" मेरे उद्देश्यों के लिए सबसे स्मार्ट लगता है, मेरा उद्देश्य इस बीच डेटाबेस में हुए किसी भी गैर-परस्पर विरोधी परिवर्तन के साथ मेरे परिवर्तनों को मर्ज करना है।

अगर मैं इसे सही तरीके से समझूं। :)


5
इस उत्तर ने मेरे मामले में समस्या को ठीक कर दिया: dc.Refresh(RefreshMode.KeepChanges,changedObject);dc.SubmitChanges से पहले
HugoRune

डायनेमिक डेटा वेबसाइट में गुणों के लिए ReadOnlyAttribute को लागू करते समय मेरे पास यह समस्या थी। अद्यतनों ने काम करना बंद कर दिया और मुझे "पंक्ति नहीं मिली या बदली गई" त्रुटि आ रही थी (आवेषण हालांकि ठीक थे)। उपरोक्त फिक्स प्रयास और समय के भार को बचाया!
क्रिस तोप

क्या आप कृपया रीफ्रेशमोड मूल्यों की व्याख्या कर सकते हैं जैसे कि KeepCurrentValues ​​का क्या मतलब है? यह क्या करता है? बहुत धन्यवाद। मैं एक सवाल बना सकता है ...
क्रिस कैनन

मुझे समान पंक्तियों पर शुरू करने के लिए एक और लेनदेन के लिए समय पर पूरा नहीं होने वाले समवर्ती लेनदेन की समस्याएं थीं। KeepChanges ने यहां मेरी मदद की, इसलिए शायद यह केवल वर्तमान लेनदेन (मूल्यों को बचाए रखते हुए) को निरस्त करता है और नए को शुरू करना (ईमानदारी से मुझे पता नहीं है)
Erik Bergstedt

11

यह एक से अधिक DbContext का उपयोग करने के कारण भी हो सकता है।

उदाहरण के लिए:

protected async Task loginUser(string username)
{
    using(var db = new Db())
    {
        var user = await db.Users
            .SingleAsync(u => u.Username == username);
        user.LastLogin = DateTime.UtcNow;
        await db.SaveChangesAsync();
    }
}

protected async Task doSomething(object obj)
{
    string username = "joe";
    using(var db = new Db())
    {
        var user = await db.Users
            .SingleAsync(u => u.Username == username);

        if (DateTime.UtcNow - user.LastLogin >
            new TimeSpan(0, 30, 0)
        )
            loginUser(username);

        user.Something = obj;
        await db.SaveChangesAsync();
    }
}

यह कोड समय-समय पर विफल रहेगा, उन तरीकों से जो अप्रत्याशित प्रतीत होते हैं, क्योंकि उपयोगकर्ता दोनों संदर्भों में उपयोग किया जाता है, एक में परिवर्तित और सहेजा जाता है, फिर दूसरे में सहेजा जाता है। "कुछ" का स्वामित्व रखने वाले उपयोगकर्ता का इन-मेमोरी प्रतिनिधित्व डेटाबेस में क्या है, इसके साथ मेल नहीं खाता है, और इसलिए आपको यह गुप्त बग मिलता है।

इसे रोकने का एक तरीका यह है कि किसी भी कोड को कभी भी लाइब्रेरी विधि के रूप में लिखा जाए, ताकि वह वैकल्पिक DbContext ले सके:

protected async Task loginUser(string username, Db _db = null)
{
    await EFHelper.Using(_db, async db =>
    {
        var user = await db.Users...
        ... // Rest of loginUser code goes here
    });
}

public class EFHelper
{
    public static async Task Using<T>(T db, Func<T, Task> action)
        where T : DbContext, new()
    {
        if (db == null)
        {
            using (db = new T())
            {
                await action(db);
            }
        }
        else
        {
            await action(db);
        }
    }
}

तो अब आपकी विधि एक वैकल्पिक डेटाबेस लेती है, और यदि कोई नहीं है, तो वह स्वयं जाता है और बनाता है। अगर वहाँ है तो बस वही उपयोग करता है जो अंदर पारित किया गया था। सहायक विधि आपके ऐप में इस पैटर्न का पुन: उपयोग करना आसान बनाती है।


10

मैंने सर्वर एक्स्प्लोरर से डिज़ाइनर और री-बिल्डिंग की एक टेबल पर रिग्रेग करके इस त्रुटि को हल किया।


सर्वर एक्सप्लोरर से डिजाइनर के लिए अपमानजनक तालिका को फिर से व्यवस्थित करना और मेरे लिए भी इसका पुनर्निर्माण करना।
रैस्टहाउस हाउस

4

C # कोड पर आपको इस त्रुटि को ओवरराइड करने की आवश्यकता है:

            try
            {
                _db.SubmitChanges(ConflictMode.ContinueOnConflict);
            }
            catch (ChangeConflictException e)
            {
                foreach (ObjectChangeConflict occ in _db.ChangeConflicts)
                {
                    occ.Resolve(RefreshMode.KeepChanges);
                }
            }

मेरे पास डेटाबेस के लिए एक अनुप्रयोग फ्रंट-एंड द्वारा प्रस्तुत आइटम हैं। एक सेवा में इन ट्रिगर निष्पादन, प्रत्येक अलग धागे पर। उपयोगकर्ता एक 'रद्द' बटन हिट कर सकता है जो सभी बकाया कमांड की स्थिति को बदल देता है। सेवा हर एक को समाप्त करती है, लेकिन पाती है कि 'लंबित' को 'रद्द' में बदल दिया गया था और इसे 'पूर्ण' में नहीं बदल सकते। इससे मेरे लिए समस्या ठीक हो गई।
pwrgreg007

2
इसके अलावा RefreshMode के अन्य एनुमरेशन्स की जाँच करें, जैसे KeepCurrentValues। ध्यान दें कि आपको इस तर्क का उपयोग करने के बाद SubmitChanges को फिर से कॉल करना होगा। Msdn.microsoft.com/en-us/library/… देखें ।
pwrgreg007

3

मुझे नहीं पता कि आपको अपने प्रश्न का कोई संतोषजनक उत्तर मिला है, लेकिन मैंने इसी तरह का प्रश्न पोस्ट किया और अंततः खुद ही इसका उत्तर दिया। यह पता चला है कि डेटाबेस के लिए NOCOUNT डिफ़ॉल्ट कनेक्शन विकल्प चालू किया गया था, जो Linq से Sql के साथ किए गए हर अपडेट के लिए ChangeConflictException का कारण बना। आप यहाँ पर मेरी पोस्ट का उल्लेख कर सकते हैं ।


3

मैंने (UpdateCheck = UpdateCheck.Never)सभी [Column]परिभाषाओं को जोड़कर इसे ठीक किया ।

हालांकि एक उचित समाधान की तरह महसूस नहीं करता है। मेरे मामले में यह इस तथ्य से संबंधित प्रतीत होता है कि इस तालिका का एक अन्य तालिका से जुड़ाव है जहां से एक पंक्ति हटा दी जाती है।

यह विंडोज फोन 7.5 पर है।


1

मेरे मामले में, त्रुटि तब उत्पन्न हुई जब दो उपयोगकर्ताओं के पास अलग-अलग LINQ-to-SQL डेटा संदर्भ एक ही इकाई को एक ही तरीके से अद्यतन करते हैं। जब दूसरे उपयोगकर्ता ने अपडेट का प्रयास किया, तो उनके डेटा के संदर्भ में उनके पास जो कॉपी थी, वह तब भी बासी थी, जबकि पहला अपडेट पूरा होने के बाद भी इसे पढ़ा गया था।

मैंने इस आलेख में अक्षय फड़के द्वारा स्पष्टीकरण और समाधान की खोज की: https://www.c-sharpcorner.com/article/overview-of-concurrency-in-linq-to-sql/

यहाँ वह कोड है जिसे मैंने अधिकतर उठाया है:

try
{
    this.DC.SubmitChanges();
}
catch (ChangeConflictException)
{
     this.DC.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues);

     foreach (ObjectChangeConflict objectChangeConflict in this.DC.ChangeConflicts)
     {
         foreach (MemberChangeConflict memberChangeConflict in objectChangeConflict.MemberConflicts)
         {
             Debug.WriteLine("Property Name = " + memberChangeConflict.Member.Name);
             Debug.WriteLine("Current Value = " + memberChangeConflict.CurrentValue.ToString());
             Debug.WriteLine("Original Value = " + memberChangeConflict.OriginalValue.ToString());
             Debug.WriteLine("Database Value = " + memberChangeConflict.DatabaseValue.ToString());
         }
     }
     this.DC.SubmitChanges();
     this.DC.Refresh(RefreshMode.OverwriteCurrentValues, att);
 }

जब मैंने डिबगिंग करते समय अपने आउटपुट विंडो को देखा, तो मैं देख सकता था कि करंट वैल्यू डेटाबेस मूल्य से मेल खाती है। "मूल मूल्य" हमेशा अपराधी था। यह अद्यतन को लागू करने से पहले डेटा संदर्भ द्वारा पढ़ा गया मान था।

प्रेरणा के लिए MarceloBarbosa को धन्यवाद।


0

मुझे पता है कि यह सवाल लंबे समय से उत्तर दिया गया है, लेकिन यहां मैंने पिछले कुछ घंटों को एक दीवार के खिलाफ अपना सिर पीटने में बिताया है और मैं सिर्फ अपना समाधान साझा करना चाहता हूं जो इस धागे में किसी भी आइटम से संबंधित नहीं है:

कैशिंग!

मेरे डेटा ऑब्जेक्ट का चयन () हिस्सा कैशिंग का उपयोग कर रहा था। जब वस्तु को अद्यतन करने की बात आती है तो रॉ नॉट फाउंड या चेंजेड एरर क्रॉप होता है।

कई जवाबों ने विभिन्न DataContext के उपयोग का उल्लेख किया है और पूर्वव्यापी में यह शायद यही हो रहा है, लेकिन इसने मुझे तुरंत सोचने के लिए प्रेरित नहीं किया कि उम्मीद है कि यह किसी की मदद करेगा!


0

मैंने हाल ही में इस त्रुटि का सामना किया, और पाया कि समस्या मेरे डेटा संदर्भ के साथ नहीं थी, लेकिन एक अद्यतन वक्तव्य के साथ एक ट्रिगर के अंदर फायरिंग के बाद कमेट को कॉनटेक्स्ट पर बुलाया जा रहा था। ट्रिगर एक अशक्त मान के साथ एक गैर-अशक्त क्षेत्र को अपडेट करने की कोशिश कर रहा था, और यह संदर्भ को ऊपर उल्लिखित संदेश के साथ त्रुटि का कारण बना रहा था।

मैं इस उत्तर को पूरी तरह से इस त्रुटि से निपटने में दूसरों की मदद करने के लिए जोड़ रहा हूं और ऊपर दिए गए उत्तरों में संकल्प नहीं ढूंढ रहा हूं।


0

मुझे दो अलग-अलग संदर्भों का उपयोग करने के कारण भी यह त्रुटि मिली है। मैंने एकल डेटा संदर्भ का उपयोग करके इस समस्या को हल किया।


0

मेरे मामले में समस्या सर्वर-वाइड उपयोगकर्ता विकल्पों के साथ थी। निम्नलिखित:

https://msdn.microsoft.com/en-us/library/ms190763.aspx

मैंने कुछ प्रदर्शन लाभ पाने के लिए आशा में NOCOUNT विकल्प को सक्षम किया:

EXEC sys.sp_configure 'user options', 512;
RECONFIGURE;

और यह प्रभावित पंक्तियों के लिए लाइनक के चेक को तोड़ने के लिए निकला (जितना मैं इसे .NET स्रोतों से समझ सकता हूं), ChangeConflictException के लिए अग्रणी

512 बिट समस्या को बाहर करने के लिए विकल्पों को रीसेट करना।


0

Qub1n के उत्तर को नियोजित करने के बाद, मैंने पाया कि मेरे लिए मुद्दा यह था कि मैंने अनजाने में एक डेटाबेस कॉलम को दशमलव (18,0) घोषित कर दिया था। मैं एक दशमलव मान प्रदान कर रहा था, लेकिन डेटाबेस इसे बदल रहा था, दशमलव भाग को अलग कर रहा था। इसके परिणामस्वरूप पंक्ति बदल गई।

बस इसे जोड़ना अगर किसी और को एक समान मुद्दे में चलता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.