मान शून्य नहीं हो सकता। पैरामीटर नाम: स्रोत


129

यह संभवतः समय की समस्या का सबसे बड़ा अपशिष्ट है जिसे मैंने लंबे समय तक हल करने में घंटों बिताए हैं।

var db = new hublisherEntities();
establishment_brands est = new establishment_brands();

est.brand_id = 1;
est.establishment_id = 1;
est.price = collection["price"];
est.size = collection["size"];

db.establishment_brands.Add(est);
db.SaveChanges();

यह मुझे एक त्रुटि देता है

मान शून्य नहीं हो सकता। पैरामीटर नाम: स्रोत

का ढेर

[तर्कबोधक अपवाद: मूल्य शून्य नहीं हो सकता। पैरामीटर नाम: स्रोत] System.Linq.Enumerable.Any (IEnumerable 1 source, Func2 predicate) +4083335 System.Data.Entity.Internal.InternalContext.WrapUpddexException (UpdateException updateException) +87
System.Data.Entity.Internal.InternContext 193
System.Data.Entity.Internal.LazyInternalContext.SaveChanges () +33
System.Data.Entity.DbContext.SaveChanges () +20 ...

मैं केवल तालिका में एक इकाई जोड़ना चाहता हूं। ORM EF है।


7
क्या अपवाद संदेश व्याख्यात्मक नहीं है? कुछ अशक्त है जो अशक्त नहीं हो सकता। आपका db स्कीमा क्या है?
ऐश बर्लज़ेंको

आप इस प्रश्न और उसके उत्तरों पर गौर करना चाहते हैं: stackoverflow.com/questions/3244336/…
Ville Salonen

1
संभवतः कलेक्टिन में प्रविष्टियों में से एक में एक शून्य मान है: est.price = संग्रह ["मूल्य"]; est.size = collection ["size"];
मिकटवेब

1
@AshBurlaczenko ओह, आपको लगता है? मेरा स्कीमा ऐसा लगता है जैसे हर कॉलम अशक्त हो सकता है।
डैनियलोविच

2
क्या आप अपना कनेक्शन स्ट्रिंग पोस्ट कर सकते हैं?
anaximander

जवाबों:


42

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

एक अनुमान पर, आपको कुछ इस तरह की आवश्यकता होगी:

<connectionStrings>
    <add name="hublisherEntities" connectionString="Data Source=localhost;Initial Catalog=hublisher;Integrated Security=True;" providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
        <parameters>
            <parameter value="Data Source=localhost;Initial Catalog=hublisher;Integrated Security=True" />
        </parameters>
    </defaultConnectionFactory>
</entityFramework>

क्या हो रहा है कि यह गलत जगह डेटा स्रोत की तलाश कर रहा है; एंटिटी फ्रेमवर्क इसे थोड़ा अलग तरीके से निर्दिष्ट करता है। यदि आप अपना कनेक्शन स्ट्रिंग और ईएफ कॉन्फिगर करते हैं तो हम जांच कर सकते हैं।


2
मेरे मामले में यह कोड में एक गलत धारणा स्ट्रिंग था, लेकिन फिर भी एक कनेक्शन स्ट्रिंग समस्या फिर भी।
जलेच

190

DbContext अंदर कहीं न कहीं एक मूल्य है कि है IEnumerableऔर साथ क्वेरी की जाती है Any()(या Where()या Select()या किसी अन्य LINQ-विधि), लेकिन यह मूल्य है null

पता लगाएँ कि क्या आप एक साथ एक क्वेरी डालते हैं (आपके उदाहरण के कोड के बाहर कहीं) जहां आप एक LINQ- विधि का उपयोग कर रहे हैं, या कि आपने IEnumerableएक पैरामीटर के रूप में उपयोग किया है जो NULL है।


7
इससे मेरे लिए समस्या हल हो गई, मुझे संदेह है कि यह ओपी के लिए समाधान है, भले ही स्वीकृत उत्तर अलग हो।
निब्लीपिग

4
मेरे लिए जवाब यह था कि मैंने अभी तक सूची को आरंभीकृत नहीं किया था जिसे मैं फ़िल्टर करने का प्रयास कर रहा था .Where()- यह अभी भी था null
ब्रायन लेसी

1
इस प्रकार की अशक्त त्रुटियों से बचने के लिए, आपको या तो IEnumerable गुणों में एक डिफ़ॉल्ट मान रखने की कोशिश करनी चाहिए या किसी के साथ उनका परीक्षण करना चाहिए ()
Fer R

1
अन्य बहुत कम मूल्यांकन किए गए उत्तरों के नीचे 140+ upvotes के साथ यह उत्तर कैसा है?
nldev

1
यह उत्तर कम है, क्योंकि यह स्वीकृत उत्तर नहीं है। पहला उत्तर संभवतः मूल पोस्टर के लिए सही उत्तर था। यह उत्तर संभवतः कई अन्य लोगों के लिए सही उत्तर था।
मार्टिन मूलर

11

मेरा कारण यहां के बाकी हिस्सों से अलग था इसलिए मैंने सोचा कि मैं इसे किसी और के लिए पोस्ट कर दूंगा जो इस मुद्दे पर हो सकता है।

मैं नल के एक फिल्टर के साथ DbSet के उदाहरण पर काउंट को कॉल कर रहा था

dbSet.Count(null);

मैंने पाया कि यहाँ अशक्त होना त्रुटि पैदा कर रहा था इसलिए मैं अब फ़िल्टर को शून्य होने पर पैरामीटर-कम विधि कहता हूँ:

 if (filter == null)
 {
     return dbSet.Count();
 }
 else
 {
     return dbSet.Count(filter);
 }

इससे मेरे लिए समस्या हल हो गई। यह DbSet पर किसी भी अन्य तरीकों के लिए एक मुद्दा हो सकता है।


9

मैं तो बस, क्योंकि मैं नहीं था नेट कोर 2.2 इकाई की रूपरेखा में इस सटीक त्रुटि मिली set;मेरी में DbContextतो जैसे:

public DbSet<Account> Account { get; }

में परिवर्तित किया गया:

public DbSet<Account> Account { get; set;}

हालाँकि, इसका अपवाद तब तक नहीं दिखा, जब तक मैंने एक linq क्वेरी का उपयोग करने की कोशिश नहीं की Where()और Select()जैसा कि दूसरों ने ऊपर उल्लेख किया था।

मैं DbSetकेवल पढ़ने के रूप में सेट करने की कोशिश कर रहा था । मैं कोशिश करता रहूँगा ...


1
लिनकैप्ड के साथ अपनी विधानसभा का उपयोग करने की कोशिश करते समय मुझे यह सटीक समस्या थी। इसके लिए धन्यवाद, मैं अधिक समय बर्बाद कर सकता था। .Net कोर 3.1 / EF कोर 3.1 यहाँ।
रविवार

3

FYI के रूप में, किसी को यह उपयोगी लग सकता है। मैं इस त्रुटि के लिए लगभग 2 दिनों से अपनी पूंछ का पीछा कर रहा था और हमेशा कुछ बड़ा सोच रहा था और उन कक्षाओं की तलाश कर रहा था जो कि समस्या हो सकती है और अंत में मुझे यह बहुत ही मूर्खतापूर्ण मुद्दा लगा और यह मेरे पेज (HTML) कोड में mypage.ascx था । मुद्दा यह था कि मेरे पास एक है <asp:EntityDataSource>और इसमें एक सम्मिलित संपत्ति है और मेरे पास यहां सूचीबद्ध कुछ अन्य टेबल हैं और गलती से एक टेबल थी जिसे हाल ही में डेटाबेस से हटा दिया गया है और मैंने कभी गौर नहीं किया और यह अन्य संस्थाओं के साथ अशक्त लौट रहा है। मैंने सिर्फ लिस्ट लिस्ट से बेवकूफ टेबल को हटा दिया और मैं जाने के लिए अच्छा हूं। आशा है कि यह किसी की मदद कर सकता है।


2

यदि कोई अन्य व्यक्ति पहले डीबी फ़र्स्ट एंटिटी फ्रेमवर्क सेटअप के साथ मेरे मुद्दे के साथ समाप्त होता है।

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

मैं अपने DbSets को नए अधिभार में आरंभ करने के लिए कॉल जोड़ना भूल गया। इसलिए ऑटो-जेनरेट किया गया पैरामीटर-कम कंस्ट्रक्टर कुछ इस तरह दिखता है:

    public MyEntities()
        : base("name=MyEntity")
    {
        Set1 = Set<MyDbSet1>();
        Set2 = Set<MyDbSet2>();
    }

और मेरा नया अधिभार इस तरह दिखाई दिया:

    public MyEntities(string connectionString)
        : base(connectionString)
    {
    }

समाधान उन इनिशियलाइज़र को जोड़ने के लिए था जो ऑटो-जनरेट किए गए कोड का ध्यान रखते हैं, एक सरल मिस्ड स्टेप:

     public MyEntities(string connectionString)
        : base(connectionString)
    {
        Set1 = Set<MyDbSet1>();
        Set2 = Set<MyDbSet2>();
    }

यह वास्तव में मुझे एक लूप के लिए फेंक देता है क्योंकि हमारे रेसपोजिटरी में कुछ कॉल जिसमें DbContext का उपयोग किया गया था, ने ठीक काम किया (जिन्हें उन आरंभिक DBSets की आवश्यकता नहीं थी), और अन्य ओपी में वर्णित रनटाइम त्रुटि को फेंक देते हैं।


1

सुनिश्चित करें कि आप रिपॉजिटरी को सर्विस के कंस्ट्रक्टर में इंजेक्ट कर रहे हैं। यह मेरे लिए हल है। :: माथे को धब्बा ::


1

यदि आप अशक्त संग्रह में मानों को गिनने का प्रयास करते हैं तो यह अपवाद वापस आ जाएगा।

उदाहरण के लिए जब एरर अशक्त नहीं है तो नीचे दिए गए कार्य, हालांकि यदि एरर्स शून्य है तो मान शून्य नहीं हो सकता है। पैरामीटर नाम: स्रोत अपवाद होता है।

if (graphQLResponse.Errors.Count() > 0)

इसके बजाय नल की जाँच करके इस अपवाद से बचा जा सकता है।

if (graphQLResponse.Errors != null)

1

निम्नलिखित समाधान के साथ हल किया गया

  1. edmxफ़ाइल पर राइट क्लिक करें , Open with, XML Editor चुनें
  2. edmx:StorageModelsतत्व में इकाई का पता लगाएँ
  3. DefiningQueryपूरी तरह से हटा दें
  4. नाम बदलें store:Schema="dbo"करने के लिए Schema="dbo"(यदि मौजूद है)
  5. store:Nameसंपत्ति निकालें

स्कीमा = "डीबो" टू स्कीमा = "डीबो" - क्या?
विंसेंट बसकेरलो

0

यह मेरे मामले में मूर्खतापूर्ण हो सकता है जहां savechanges bcoz को गलत कर रहा था db में विदेशी कुंजी नहीं थी और EDM तालिकाओं में संघों को जोड़ा गया था। मैंने db में विदेशी कुंजियाँ जोड़ीं और EDM को ठीक करने के लिए पुनर्जीवित किया।

मैं जिन त्रुटियों को देख रहा था, वे इस प्रकार हैं: केस 1 -> ईडीएम संदेश के लिए DBContext का उपयोग करते समय = मान शून्य नहीं हो सकता। पैरामीटर नाम: Source at System.Linq.Enumerable.Any [TSource] (IEnumerable)1 source, Func 2 )

केस 2 -> EDM संदेश के लिए ObjectContext का उपयोग करते समय = EntitySet 'संपर्क' को अपडेट करने में असमर्थ क्योंकि इसमें एक DefiningQuery है और वर्तमान ऑपरेशन का समर्थन करने के लिए तत्व में कोई तत्व मौजूद नहीं है।

(अगर वह किसी की मदद करता है तो उसे वहां फेंक देना चाहता था)।


0

MVC में, दृश्य स्क्रीन कॉलिंग विधि है जो नियंत्रक या Repository.cs में है और CSHTML में किसी भी नियंत्रण पर रिटर्न वैल्यू असाइन करता है, लेकिन यह विधि वास्तव में .cs / कंट्रोलर में लागू नहीं होती है, तो CSHTML NULL पैरामीटर अपवाद को फेंक देगा।


0

मुझे यह त्रुटि तब हुई जब मेरे पास एक इकाई संपत्ति के लिए एक अवैध प्रकार था।

public Type ObjectType {get;set;}

जब मैंने संपत्ति निकाली तो त्रुटि होना बंद हो गई।


0

मेरे मामले में, IIS पर वेब एप्लिकेशन को कॉन्फ़िगर करते समय समस्या उत्पन्न हुई, जब किसी रिकॉर्ड पर अपडेट कमांड को निकाल दिया गया तो यह त्रुटि उत्पन्न हुई।

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


0

मेरी गलती थी .ThenInclude (s => s.SubChildEntities को पैरेंट पर जोड़ना भूल गया। रेजर व्यू में SubChildEntities को कॉल करने का प्रयास करते हुए कंट्रोलर एक्शन को Include (c => c.SubChildEntities) में शामिल करें।

var <parent> = await _context.Parent
            .Include(c => c.<ChildEntities>)
            .ThenInclude(s => s.<SubChildEntities>)
            .SingleOrDefaultAsync(m => m.Id == id);

यह ध्यान दिया जाना चाहिए कि विज़ुअल स्टूडियो 2017 कम्यूनिटी की इंटेलीजेंसी, .TInInclude () में लैम्बडा एक्सप्रेशन में SubChildEntities ऑब्जेक्ट नहीं उठाती है। यह सफलतापूर्वक संकलन और निष्पादित करता है।


0

मुझे पता है कि यह प्रश्न के वर्ष 2013 से एक लंबा रास्ता है, लेकिन यह लक्षण दिखा सकता है कि क्या आपके पास ASP.NET कोर के लिए ASP.NET 5 ऐप को माइग्रेट करते समय आलसी लोडिंग सक्षम नहीं है, और फिर अपग्रेड करने की कोशिश कर रहा है एंटिटी फ्रेमवर्क कोर 2.x (EF 6 से)। एंटिटी फ्रेमवर्क कोर ने आलसी लोडिंग प्रॉक्सी सपोर्ट को एक अलग पैकेज में स्थानांतरित कर दिया है कर दिया है, इसलिए आपको इसे स्थापित करना होगा।

यह विशेष रूप से सच है यदि आपने सभी लोड किया है एक एंटिटी फ्रेमवर्क कोर एसक्यूएल सर्वर पैकेज (जो एंटिटी फ्रेमवर्क को ठीक करता है)।

प्रॉक्सीज़ पैकेज स्थापित करने के बाद, फिर, जैसा कि डॉक्स कहते हैं, .UseLazyLoadingProxies()DbContext विकल्प बिल्डर (अपने स्टार्टअप डि सेटअप सेक्शन में, या जहाँ भी आप अपने DbContext को कॉन्फ़िगर करते हैं) पर इनवॉइस करें, और उपरोक्त अपवाद को फेंकने वाले नेविगेशनल इसे फेंकना बंद कर देंगे, और एंटिटी फ्रेमवर्क 6 के रूप में काम करेगा।


मैं इस पथ नीचे शुरू कर दिया और कुछ परिस्थितियों में यह काम हो सकता है, लेकिन मैं बहुत जल्दी से इस में भाग stackoverflow.com/questions/41881169/...
infocyde

0

मैं XUnit के साथ एक ही मुद्दा था। समस्या मेरे डेटाबेस कनेक्शन के साथ थी। जांचें कि आपका कनेक्शन स्ट्रिंग सही है या नहीं।


0

और, मेरे मामले में, मैंने गलती से अपने दो अलग-अलग स्तंभों को परिभाषित किया जैसे नीचे DbContext कॉन्फ़िगरेशन पर पहचान,

builder.HasKey(e => e.HistoryId).HasName("HistoryId");
builder.Property(e => e.Id).UseSqlServerIdentityColumn(); //History Id should use identity column in this example

जब मैंने इसे नीचे की तरह सही किया,

builder.HasKey(e => e.HistoryId).HasName("HistoryId");
builder.Property(e => e.HistoryId).UseSqlServerIdentityColumn();

मुझे इस त्रुटि से भी छुटकारा मिल गया है।


-3

डेटाबेस में एक पंक्ति ले लो और इस "NULL" की तरह उस पंक्ति में सभी कॉलम को अशक्त बना दें। अब पास की कोशिश करें या अन्य किसी का उपयोग करके उस NULL मान को पास करें।


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