उसी कुंजी के साथ एक आइटम पहले ही जोड़ा जा चुका है


135

जब भी मैं फॉर्म जमा करता हूं तो मुझे यह त्रुटि मिलती है क्योंकि इस वजह से कार्रवाई का तरीका नहीं बुलाया जा रहा है:

उसी कुंजी के साथ एक आइटम पहले ही जोड़ा जा चुका है।

और अपवाद विवरण:

[ArgumentException: उसी कुंजी के साथ एक आइटम पहले ही जोड़ा जा चुका है।]
System.ThrowHelper.ThrowArgumentException (ExceptionResource resource) +52
System.Collections.Generic. मंदन .2.Insert (TKey कुंजी, TValue value, Boolean add) +9382923 System .Linq.Enumerable.ToDictionary (IEnumerable`1 स्रोत, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 तुलनित्र) +252.Linq.Enumerable.Toprise
(IEnumerable`1 स्रोत, Func`2 keySelecture तुलनित्र) +91
System.Web.Mvc.ModelBindingContext.get_PropertyMetadata () 13:8 System.Web.Mvc.DefaultModelBinder.BindProperty (कंट्रोलरटेक्स्ट कंट्रोलर नियंत्रक), ModelBindingContext बाइंड कॉनटेक्स्ट, प्रॉपर्टीस्क्रिप्ट, प्रॉपर्टीस्क्रिप्ट
System.Web.Mvc.DefaultModelBinder.BindProperties (ControllerContext controllerContext, ModelBindingContext bindingContext) 147
System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel (ControllerContext controllerContext, ModelBindingContext bindingContext, वस्तु मॉडल) +98
System.Web.Mvc.DefaultModelBinder.BindComplexModel (ControllerContext कंट्रोलर कोंटेक्स्ट, मॉडलबाइंडिंगटेक्स्ट बाइंडिंग कॉन्टेक्स्ट) +2504 सिस्टम.वेब। एमवी। डीफॉल्टमॉडल बेलिंडर.बिंडमॉडल
(कंट्रोलर कोन्टेक्स्ट कंट्रोलर कोनटेक्स्ट, मॉडलबोनक्स्ट बाइंडिंग कॉन्टेक्स्ट) +548 सिस्टम.वेब.नट्रोलररक्वाइनर, प्लेटिनम
, ई-मेल।
System.Web.Mvc.ControllerActionInvoker.GetParameterValues ​​(ControllerContext नियंत्रकContext, ActionDescriptor एक्शनDescriptor) +181 System.Web.Mvc.ControllerActionInvoker.InvokeAction (नियंत्रककॉनटेक्स्ट कंट्रोलर। प्रसंग, एक्शन
स्ट्रिंग)। .Web.Mvc.ControllerBase.Execute (RequestContext requestContext) +111
System.Web.Mvc.ControllerBase.System।
System.Web.Mvc। <> C__DisplayClass8.b__4 () +65 System.Web.M.A.Async। <> C__DisplayClass1.b__0 () +44 System.Web.Mvc .Anync। <> C__DisplayClass8`1.b__7 (IAsyncResult _)। ) +42 System.Web.Mvc.Async.WrappedAsyncResult`1.End () +141 System.Web.Mvc.Async.AsyncResultWrapper.End (और IAsyncResult asyncResult, ऑब्जेक्ट टैग) +54
System.Web.Ms.Async.AsyncResultWrapper। अंत (IAsyncResult asyncResult, ऑब्जेक्ट टैग) +40
System.Web.Mvc.MvcHandler.EndProcessRequest (IAsyncResult asyncResult) +52
System.Web.Mvc.MvcHvcler.System.Web.HttpAsyncHandler.EndProcessRequest ( IAsync परिणाम)
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute () +8836913 System.Web.HttpApplication.ExecuteStep (IExecutionStep स्टेप, बूलियन और पूर्णतया समकालिकता) +184

पृष्ठ देखें

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/XYZ.Master"
    Inherits="System.Web.Mvc.ViewPage<XYZ.Models.Admin.AdminSegmentCommissionsModel>" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
        Create
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
        <% using (Html.BeginForm()) {%>    
            <div class="box3">
                <div class="userinfo">
                    <h3>Admin Segment Commissions</h3>
                </div>
                <div class="buttons-panel">
                    <ul>
                       <li>
                           <input type="submit" value="Save" class="save" />
                       </li>
                       <li>
                           <%:Html.ActionLink("Cancel", "Index", new { controller = "AdminSegmentCommissions" }, new { @class = "cancel" })%>
                           <%--<input type="button" value="Cancel" class="cancel" onclick="document.location.href='/AirlineLedgerTransactionReceiver/Index'" />--%>
                       </li>
                   </ul>
               </div>
           </div>
           <div class="row-1">
               <div class="form-box1 round-corner">
                   <div class="form-box1-row">
                       <div class="form-box1-row-content float-left">
                           <div>
                               <label>
                                   <%: Html.LabelFor(model => model.FromSegmentNumber) %></label>
                                   <%: Html.TextBoxFor(model => model.FromSegmentNumber) %>
                                   <%: Html.ValidationMessageFor(model => model.FromSegmentNumber) %>
                          </div>
                      </div>
                  </div>
              </div>
          </div>
      <%} %>


2
इसके लिए आपको अधिक संदर्भ जोड़ने की आवश्यकता है। हमें नियंत्रक कोड दिखाएं और आपके द्वारा किए जा रहे सटीक कार्यों का वर्णन करें। अपने आप से थोड़ा सा डिबगिंग करें ताकि आपके प्रश्न अधिक क्रियात्मक हों और न कि केवल कोड / स्टैक के विशालकाय गांठ।
2:14

मैंने अपने JSON की जाँच की मैं बहुत ही बारीकी से पोस्ट कर रहा था और एक डुप्लिकेट प्रॉपर्टी मिली - एक ग्राहक द्वारा वर्तनी और एक ग्राहक की वर्तनी - एक जावास्क्रिप्ट टाइपो के माध्यम से दोनों संपत्तियों को JSON मैं पोस्ट कर रहा था में जोड़ा गया था, इसलिए सिर्फ एक हेड जो इस मुद्दे को हल करता है मुझे।
एवीएच

जवाबों:


225

सबसे अधिक संभावना है , आपके पास मॉडल है जिसमें दो बार समान संपत्ति होती है । शायद आप newआधार संपत्ति को छिपाने के लिए उपयोग कर रहे हैं।

समाधान संपत्ति को ओवरराइड करना या किसी अन्य नाम का उपयोग करना है।

यदि आप अपना मॉडल साझा करते हैं, तो हम और अधिक विस्तार करने में सक्षम होंगे।


16
C # में, कहते हैं, अगर आपके पास वेरिएबल 1 और वेरिएबल 1 है (यह त्रुटि को फेंक देगा)। इसके अलावा, यह सुनिश्चित करने के लिए जांचें कि कोई समान edmx नाम नहीं है (तालिका स्तंभ में "CURRENCY" है, नेविगेशन गुणों में से एक का नाम "मुद्रा" था)
रॉबर्ट कोच

7
@ नवीन महान यह तय हो गया है! मैं देखता हूं कि यह कैसे संकलित किया जा सकता है, लेकिन यहां त्रुटि है। फ्रेमवर्क के कुछ हिस्से (C # के विपरीत) केस-असंवेदनशील है।
एलियोस्टैड

9
किसी को पता है कि कैसे पहचान करने के लिए "एक ही कुंजी है?"
क्लेकॉम्ब

1
कुछ व्यू मॉडल्स के साथ फ़िड होने के बाद मुझे यह मिलना शुरू हुआ (एक Id संपत्ति जोड़ी)। दोष यह था कि जेएस पहले से ही कुछ यूआई प्रबंधन के लिए ऑब्जेक्ट पर एक "आईडी" (लोअरकेस आईडी) डाल रहा था, लेकिन सबमिट करते समय, जेएसएन ऑब्जेक्ट में "आईडी" और "आईडी" दोनों गुण थे, जो उसी कुंजी में मैप करते हैं ASP.NET का मॉडल बाइंडर है, इसलिए यह त्रुटि है।
Svend

1
पुनश्च: यह MVC3 में अनुमत है, लेकिन MVC5 में नहीं। यकीन नहीं कि इसे क्यों बदला गया है।
जूलियन

20

मुझे भी यही समस्या थी और मैंने इसे हल किया। मेरे ViewModel में उसी नाम की डुप्लिकेट प्रॉपर्टी थी। एक संपत्ति BaseViewModel में थी और दूसरी व्युत्पन्न मॉडल में है।

public class BaseviewModel{
  public int UserId { get; set; }
}


 public class Model : BaseViewModel
 {
     public int UserId { get; set; }
 }

मैंने उसे बदल दिया

public class BaseviewModel{
   public int UserId { get; set; }
}


public class Model : BaseViewModel
{
    public int User_Id { get; set; }
}

अब यह ठीक काम कर रहा है।


धन्यवाद, बस एक त्वरित शुल्क, यह तब भी होता है, भले ही आधार और मॉडल में अलग-अलग मामले के साथ एक ही विशेषता का नाम हो जैसे आधार: उपयोगकर्ता, मॉडल: उपयोगकर्ता
रिचर्ड हाशम

12

मुझे एक समान समस्या थी और यह पाया गया कि ऐसा इसलिए था क्योंकि मेरे पास एक समान सार्वजनिक संपत्ति थी (जो निजी होनी चाहिए थी) जो केवल मामले में भिन्न थी।

public string PropertyName {get;set;} // actually set propertyName, get propertyName
public string propertyName {get;set;}

होना चाहिये था

public string PropertyName {get;set;} 
private string propertyName {get;set;}

12

मेरे पास इस तरह के 2 मॉडल गुण थे

public int LinkId {get;set;}
public int LinkID {get;set;}

यह अजीब है कि यह इन 2 haha ​​के लिए इस त्रुटि फेंक दिया ..


6

मुझे मेरे C # मॉडल में समस्या नहीं थी, लेकिन जावास्क्रिप्ट ऑब्जेक्ट में मैं AJAX का उपयोग करके पोस्ट कर रहा था। मैं बाध्यकारी के लिए कोणीय का उपयोग कर रहा हूं और Notesपृष्ठ पर पूंजीकृत क्षेत्र था, जबकि मेरी सी # वस्तु कम-मामले की उम्मीद कर रही थी notes। एक अधिक वर्णनात्मक त्रुटि निश्चित रूप से अच्छी होगी।

सी#:

class Post {
    public string notes { get; set; }
}

कोणीय / Javascript:

<input ng-model="post.Notes" type="text">

2
यह थोड़ा अलग जवाब है, मेरी सी # कक्षाओं में से किसी में भी अलग-अलग मामलों के साथ डुप्लिकेट गुण नहीं हैं, लेकिन जो JSON मेरे नियंत्रक को भेजा जा रहा था, उसने किया। सोचा था कि यह एक ही मुद्दे की खोज करने वाले अन्य लोगों के साथ काम आ सकता है यदि वे अपने सी # कोड में समस्या नहीं ढूंढ सकते हैं ..
जेसन गोएमाट

गोमेट के समान। जिस JSON ऑब्जेक्ट को भेजा जा रहा था उसमें डुप्लिकेट नाम थे भले ही c # ऑब्जेक्ट मैं बाइंड कर रहा था पूरी तरह से उन कुंजियों को अनदेखा कर रहा था, फिर भी यह विफल रहा। यह गूंगा है, शायद मेरे दिमाग में भी एक बग है। मैं भेजे जा रहे JSON ऑब्जेक्ट को नियंत्रित नहीं कर रहा हूं, इसलिए मैं यह नहीं बता सकता कि सभी अतिरिक्त फ़ील्ड क्या भेजे जा रहे हैं।
kukabuka

5

मेरे पास एक ही मुद्दा था, मैं foreachअपनी वस्तु पर लूपिंग कर रहा था और परिणाम को एक में जोड़ रहा Dictionary<string, string>था और मेरे पास डेटाबेस से कुंजी में एक `डुप्लिकेट था

 foreach (var item in myObject)
        {
            myDictionary.Add(Convert.ToString(item.x), 
                                   item.y);

        }

item.x डुप्लिकेट मान था


3

मुझे जवाब मिला। यह चर के कारण था। जैसे int a और string a। एक ही नाम के दो चर थे।


1

यहाँ मैंने दो बार जोड़ी जा रही कुंजी का पता लगाने के लिए क्या किया। मैंने http://referencesource.microsoft.com/DotNetReferenceSource.zip और सेटअप VS से डिबेट फ्रेमवर्क स्रोत का स्रोत कोड डाउनलोड किया । एक बार पृष्ठ लोड होने के बाद, वी.एस. में डिक्शनरी ओपन किया गया था। लाइन में एक डिबग जोड़ा ThrowHelper.ThrowArgumentException(ExceptionResource.Argument_AddingDuplicate);गया और 'कुंजी' मान को देखने में सक्षम था। मुझे एहसास हुआ कि JSON में एक वेरिएबल का एक अक्षर ऊपरी स्थिति में था लेकिन मेरे मॉडल में यह लोअरकेस था। मैंने मॉडल तय किया और अब वही कोड काम करता है।


1

मैंने इसे MVC 5 और विजुअल स्टूडियो एक्सप्रेस 2013 में हिट किया। मेरे पास IndexAttributeनीचे की तरह दो गुण थे । उनमें से एक पर टिप्पणी करना और पुनर्मूल्यांकन करने से MVC 5 नियंत्रक को विचारों के साथ मचान में मिला दिया गया, जिसमें एंटिटी फ्रेमवर्क सफल रहा। रहस्यमय तरीके से, जब मैंने विशेषता को अनियोजित किया, पुन: संकलित किया, और फिर से कोशिश की, तो स्कैफ़ोल्डर बस ठीक चला।

शायद अंतर्निहित इकाई डेटा मॉडल या "कुछ" कैश / भ्रष्ट हो गया था, और IndexAttributeबस "कुछ" के पुनर्निर्माण को हटाने और फिर से जोड़ना शुरू हो गया।

[Index(IsUnique = true)]
public string Thing1 { get; set; }

[Index(IsUnique = true)]
public string Thing2 { get; set; }

1

एमवीसी 5 में मैंने पाया कि एक एंटिटी फ्रेमवर्क मॉडल के संदर्भ में अस्थायी रूप से टिप्पणी कर रहा था, और मचान बनाते समय परियोजना की ओर से पुन: स्थापित करने से यह त्रुटि हुई। एक बार जब मैं मचान खत्म कर लेता हूं तो मैं कोड को अनफॉलो कर देता हूं।

public Guid CreatedById { get; private set; }
// Commented out so I can scaffold: 
// public virtual UserBase CreatedBy { get; private set; }

1

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

मैं कुछ अजाक्स बचा रहा था जहां मैं सर्वर को वापस भेजने के लिए मॉडल का पुनर्निर्माण कर रहा था। जब मैंने पहली बार पृष्ठ को आरंभ किया था तो मैंने अपने मूल मॉडल को एक चर में सेट किया था:

var currentModel = result.Data;

मेरी result.Dataएक संपत्ति है:result.Data.Items

इसलिए, कुछ समय बाद, मैं कुछ चीजें करता हूं और बचत करना चाहता हूं, अजाक्स के माध्यम से। प्रक्रिया का एक हिस्सा किसी ओर प्रक्रिया से एक सरणी को हथियाने और इसे मेरी currentModel.Itemsसंपत्ति पर सेट currentModelकरने और सर्वर को भेजने के लिए है।

मेरी जावास्क्रिप्ट में, हालांकि, मैंने ऐसा किया, इसके बजाय:

currentModel.items = getData();

मैं इसे पकड़ नहीं पाया, लेकिन विजुअल स्टूडियो में, यह जावास्क्रिप्ट प्रॉपर्टीज के लिए पहला अक्षर ऑटो केस कर देगा (यह एक ReSharper चीज भी हो सकती है)। तब, मुझे ओपी द्वारा पोस्ट की गई सटीक त्रुटि मिली जब मैंने सहेजने की कोशिश की क्योंकि currentModel अब currentModel.itemsAND हैcurrentModel.Items

"आइटम" से "आइटम" में एक साधारण परिवर्तन ने समस्या को ठीक कर दिया।


1

मेरी समस्या यह थी कि मेरे पास @ Url.Action था और मैंने एक ही संपत्ति के लिए दो बार मूल्य के माध्यम से भेजा था


1

मेरे मामले में, जब आप कोड संकलित करते हैं, तो यह ठीक चलता है। लेकिन एक स्थिर वर्ग के एक स्थिर क्षेत्र को कॉल करना जिसमें नमूना कोड जैसा शब्दकोष होता है, अपवाद को फेंक देता है।

नमूना कोड

public static AClass
{
    public static Dictionary<string, string> ADict = new Dictionary<string, string>()
        {
            {"test","value1"},{"test","value2"},
        };
}

स्पष्टीकरण ADict में दो बार "परीक्षण" कुंजी है। इसलिए, जब आप स्टेटिक क्लास को कॉल करते हैं, तो यह अपवाद को फेंकता है।


0

मेरा भी यही मुद्दा था। एमवीसी 3 से एमवीसी 5 में माइग्रेट करने के बाद यह मुझे दिखाई दिया।

मेरे पास कस्टम संपादक टेम्प्लेट था और इसे पहले इस तरह उपयोग करना था:

@Html.EditorFor(model => model.MyProperty, "MyCustomTemplateName", "MyPropertyField", this.ViewData)

समस्या को हल करने के लिए मुझे पासिंग ViewDataऑब्जेक्ट को हटाना पड़ा । तो अंत में मेरे पास था:

@Html.EditorFor(model => model.MyProperty, "MyCustomTemplateName", "MyPropertyField")

आशा करता हूँ की ये काम करेगा।


0

मेरी भी यही त्रुटि है। और जब मैंने पहले ही सोचा था कि मेरा मन टूट गया है, क्योंकि मैंने अपने सभी मॉडल गुणों का नाम बदल दिया था, समाधान सभी सिंकफ़्यूज़न नियंत्रणों पर एक संदर्भ हटा दिया गया था और इस नियंत्रण के व्यक्तिगत नियंत्रणों के संदर्भ जोड़ दिए थे। (नगेट से)


0

मेरे मामले में समस्या की जड़ ग्राहक के नाम पर डुप्लिकेट प्रॉपर्टी के नाम थी जो केवल केस सेंसिटिविटी से अलग थी।


0

इस त्रुटि का सामना करने का एक अन्य तरीका अनाम कॉलम वाले डेटासेट से है । त्रुटि को तब फेंका जाता है जब डाटासेट JSON में क्रमबद्ध होता है।

इस कथन के परिणामस्वरूप त्रुटि होगी:

select @column1, @column2

कॉलम नाम जोड़ने से त्रुटि को रोका जा सकेगा:

select @column1 as col1, @column2 as col2

0

मुझे एक ही त्रुटि मिली है लेकिन b / c का अलग कारण है। इकाई ढांचे का उपयोग करना। इससे पहले कि मैं अपना कोड और समाधान साझा करने से पहले मुझे एक और चीज़ जोड़ने की ज़रूरत है, मेरे पास नियंत्रक पद्धति पर एक विराम बिंदु था लेकिन यह वहां नहीं टूट रहा था, बस अपवाद 500 आंतरिक सर्वर त्रुटि को फेंक रहा था।

मैं ajax (http पोस्ट) के माध्यम से कंट्रोलर के लिए दृश्य से डेटा पोस्ट कर रहा था। एक पैरामीटर के रूप में मैं जिस मॉडल की उम्मीद कर रहा था वह एक वर्ग था। यह कुछ अन्य वर्ग के साथ विरासत में मिला था।

public class PurchaseOrder : CreateUpdateUserInfo
    {
        public PurchaseOrder()
        {
            this.Purchase_Order_Items = new List<clsItem>();
        }

        public int purchase_order_id { get; set; }
        public Nullable<int> purchase_quotation_id { get; set; }
        public int supplier_id { get; set; }
        public decimal flat_discount { get; set; }
        public decimal total { get; set; }
        public decimal net_payable { get; set; }
        public bool is_payment_complete { get; set; }
        public decimal sales_tax { get; set; }
        public DateTime CreatedOn { get; set; }
        public int CreatorUserID { get; set; }
        public DateTime UpdatedOn { get; set; }
        public int UpdatorUserID { get; set; }
        public bool IsDeleted { get; set; }
        public List<clsItem> Purchase_Order_Items { get; set; }
    }

 public class CreateUpdateUserInfo
    {
        public DateTime CreatedOn { get; set; }
        public int CreatorUserID { get; set; }
        public string CreatorUserName { get; set; }
        public DateTime UpdatedOn { get; set; }
        public int UpdatorUserID { get; set; }
        public string UpdatorUserName { get; set; }
        public bool IsDeleted { get; set; }
    }

और देखने में

                var model = {
                supplier_id : isNaN($scope.supplierID) || 0 ? null : $scope.supplierID,
                flat_discount : 0,
                total : $scope.total,
                net_payable :  $scope.total,
                is_payment_complete :  true,
                sales_tax:0,
                Purchase_Order_Item: $scope.items
            };
            var obj = {
                method: 'POST',
                url: 'Purchase/SaveOrder',
                dataType: 'json',
                data: JSON.stringify(model),
                headers: { "Content-Type": "application/json" }
            };

            var request = $rootScope.AjaxRequest(obj);
            request.then(function (response) {
                var isError = response.data.MessageType === 1;
                $rootScope.bindToaster(response.data.MessageType,response.data.Message);
                //$('html, body').animate({ scrollTop: 0 }, 'slow');
                if(!isError){
                    //$scope.supplierID =undefined;
                }
            }, function (response) {
                $rootScope.bindToaster(2,response.data);
                console.log(response);
            });

खरीदकर्ता वर्ग से केवल डुप्लिकेट किए गए फ़ील्ड हटा दिए गए और यह एक आकर्षण की तरह काम करता है।


0

मेरी भी यही त्रुटि है। जब मैं कोड की जांच करता हूं तो मैंने पाया कि मेरे कोणीय (फ़ॉन्ट-अंत) पक्ष में "GET" अनुरोध की घोषणा करें और ASP.net (बैक-एंड) पक्ष में "POST" अनुरोध की घोषणा करें। POST / GET दोनों में से किसी एक को सेट करें। फिर त्रुटि को हल किया।


0

मुझे ऐसे ही अपवाद का सामना करना पड़ा। जाँचें कि क्या सभी कॉलम में हेडर के नाम (डेटाबेस में चुनिंदा क्वेरी से) मॉडल वर्ग में बिल्कुल मिलान वाले संपत्ति नामों के साथ हैं।


0

मेरे पास DBContext पर यह मुद्दा था। जब मैंने माइग्रेशन जोड़ने के लिए पैकेज मैनेजर कंसोल में अपडेट-डेटाबेस चलाने की कोशिश की तो त्रुटि मिली:

सार्वजनिक आभासी IDbSet स्थिति {प्राप्त करें; सेट; }

समस्या यह थी कि प्रकार और नाम समान थे। मैंने इसे बदल दिया:

सार्वजनिक वर्चुअल आईडीसेट स्टेटस {मिलता है; सेट; }

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