মান নালার হতে পারে না। প্যারামিটারের নাম: উত্স


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.Intern.InternContext.WrapUpdateException (আপডেটএক্সেপশন আপডেটএক্সেপশন) +87 System সিস্টেম.ডাটা.এন্টিটি.ইন্টার্নিকান্টেক্সট
() 193
System.Data.Entity.Intern.LazyInternContext.SaveChanges () +33
System.Data.Entity.DbContext.SaveChanges () +20 ... ...

আমি কেবল টেবিলে একটি সত্তা যুক্ত করতে চাই। ORM হল EF।


7
ব্যতিক্রম বার্তা ব্যাখ্যামূলক নয়? এমন কিছু শূন্য যা শূন্য হতে পারে না। আপনার ডিবি স্কিমা কি?
অ্যাশ বুড়াকাজেনকো

আপনি এই প্রশ্নটি এবং এর উত্তরগুলি সন্ধান করতে চাইতে পারেন: stackoverflow.com/questions/3244336/…
Ville Salonen

1
সম্ভবত সংগ্রহে প্রবেশকারীগুলির মধ্যে একটিতে একটি নাল মান রয়েছে: est.price = সংগ্রহ ["দাম"]; est.size = সংগ্রহ ["আকার"];
মাইকটিওয়েব

1
@ আশবুরলাকজেনকো ওহ, আপনি কি ভাবেন? আমার স্কিমা দেখতে প্রতিটি কলামটি শূন্য হতে পারে।
ড্যানিয়েলোভিচ

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
আমার ক্ষেত্রে এটি কোডে একটি ভুল সংযোগের স্ট্রিং ছিল, তবে তবুও একটি সংযোগ স্ট্রিং সমস্যা।
jleach

190

কোথাও DbContext এর মধ্যে একটি মান যা (বা বা অন্য কোনও লিনকিউ-পদ্ধতি) IEnumerableদিয়ে জিজ্ঞাসা করা হয় , তবে এই মানটিAny()Where()Select()null

আপনি যেখানে কোনও লাইনকিউ-পদ্ধতি ব্যবহার করছেন বা যেখানে আপনি একটি ন্যূনাল IEnumerableপ্যারামিটার হিসাবে ব্যবহার করেছেন সেখানে আপনি কোনও কোয়েরি (আপনার উদাহরণ কোডের বাইরে কোথাও) রেখেছেন কিনা তা সন্ধান করুন।


7
এটি আমার কাছে সমস্যার সমাধান করেছে, আমি সন্দেহ করি এটি গ্রহণিত উত্তর আলাদা হলেও সত্ত্বেও এই ওপির সমাধান।
নিবল্বিপিগ

4
আমার জন্য উত্তর ছিল যে আমি যে তালিকাটি দিয়ে ফিল্টার করার চেষ্টা করছিলাম সেটি এখনও শুরু করেছিলাম না .Where()- এটি এখনও ছিল null
ব্রায়ান লেসি

1
এই ধরণের নাল ত্রুটিগুলি এড়ানোর জন্য আপনাকে হয় মূল গুণাবলীতে একটি ডিফল্ট মান দেওয়ার চেষ্টা করা উচিত বা কোনও () দিয়ে তাদের পরীক্ষা করা উচিত
ফের আর

1
অন্যান্য উত্তর নীচের নীচে নীচে 140+ upvotes সহ এই উত্তরটি কীভাবে?
nldev

1
এই উত্তরটি কম, কারণ এটি গৃহীত উত্তর নয়। প্রথম উত্তরটি সম্ভবত মূল পোস্টারের সঠিক উত্তর ছিল। এই উত্তর সম্ভবত অন্যান্য অনেক মানুষের পক্ষে সঠিক উত্তর ছিল।
মার্টিন মুল্ডার

11

আমার কারণ এখানে অন্যদের থেকে আলাদা ছিল তাই আমি ভেবেছিলাম যে আমি এই সমস্যাটি অন্য কারও জন্য পোস্ট করতে পারি।

আমি DbSet এর একটি উদাহরণে শূন্যের একটি ফিল্টার সহ গণনা কল করছিলাম

dbSet.Count(null);

আমি দেখতে পেয়েছি যে এখানে নাল পাস করার ফলে ত্রুটি ঘটছে তাই আমি যদি ফিল্টারটি নাল থেকে থাকে তবে আমি এখন প্যারামিটার-কম পদ্ধতিটি কল করি:

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

এটি আমার জন্য সমস্যাটি সাজিয়েছে। এটি ডিবিসেটে অন্য যে কোনও পদ্ধতির ক্ষেত্রেও সমস্যা হতে পারে।


9

আমি ঠিক এই সঠিক ত্রুটিটি পেয়েছি। নেট কোর 2.2 সত্তা ফ্রেমওয়ার্ক কারণ set;আমার DbContextমতো এটি আমার ছিল না:

public DbSet<Account> Account { get; }

পরিবর্তন:

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

যাইহোক, এটা ব্যতিক্রম দেখাতে পর্যন্ত আমি সঙ্গে একটি linq ক্যোয়ারী ব্যবহার করার চেষ্টা হয়নি Where()এবং Select()অন্যদের উপরে উল্লিখিত ছিলেন।

আমি DbSetকেবল পঠিত হিসাবে সেট করার চেষ্টা করছিলাম । আমি চেষ্টা চালিয়ে যাব ...


1
লিনকপ্যাডের সাথে আমার সমাবেশটি ব্যবহার করার চেষ্টা করার সময় আমার ঠিক এই সমস্যা হয়েছিল exact এই জন্য ধন্যবাদ, আমি উপায় আরো সময় নষ্ট করতে পারে। নেট কোর 3.1 / ইএফ কোর এখানে 3.1।
রবিবার

3

ঠিক একটি এফওয়াইআই হিসাবে, কেউ এটি দরকারী মনে হতে পারে। আমি প্রায় ২ দিন এই ত্রুটির জন্য আমার লেজটি তাড়া করছিলাম এবং সর্বদা বড় কিছু ভাবছিলাম এবং ক্লাসগুলি যা সমস্যা হতে পারে তা সন্ধান করছিলাম এবং অবশেষে আমি এটি খুব বোকা ইস্যুটি পেয়েছি এবং এটি আমার পৃষ্ঠাগুলিতে আমার মার্ক আপ (এইচটিএমএল) কোডে ছিল । সমস্যাটি ছিল আমার কাছে একটি ছিল <asp:EntityDataSource>এবং এটি একটি সম্পত্তি অন্তর্ভুক্ত করেছে এবং আমার এখানে আরও কিছু সারণী তালিকাবদ্ধ রয়েছে এবং ভুলভাবে একটি টেবিল ছিল যা সম্প্রতি ডাটাবেস থেকে মুছে ফেলা হয়েছে এবং আমি কখনই লক্ষ্য করি নি এবং এটি অন্যান্য সত্তার সাথে বাতিল হয়ে যায়। আমি অন্তর্ভুক্ত তালিকা থেকে বোকা টেবিল সরিয়েছি এবং আমি যেতে ভাল। আশা করি এটি কারও সাহায্য করতে পারে।


2

যদি অন্য কারও কাছে আমার ইস্যুটি ডিবি ফার্স্ট সত্তা ফ্রেমওয়ার্ক সেটআপের সাথে শেষ হয়।

দীর্ঘ গল্প সংক্ষেপে, সংযোগের স্ট্রিং গ্রহণ করার জন্য আমার প্রতিষ্ঠানের কন্সট্রাক্টরকে ওভারলোড করা দরকার, কারণটি অ্যাপিকটিংস.জসন থেকে সংযোগের স্ট্রিংটিকে অ্যাপ্লিকেশনফিনফ্যাগ থেকে না পেয়ে আস্প.নেট কোর নির্ভরতা ইনজেকশন ধারকটি ব্যবহার করার ক্ষমতা being প্যারামিটারলেস কনস্ট্রাক্টরকে কল করার সময় ফাইল।

আমি নতুন ওভারলোডে আমার ডিবিসেটগুলি আরম্ভ করার জন্য কলগুলি যুক্ত করতে ভুলে গেছি। সুতরাং স্বয়ংক্রিয়ভাবে উত্পাদিত প্যারামিটার-কম কনস্ট্রাক্টর এর মতো দেখতে লাগছিল:

    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 ব্যবহার করেছিল সেগুলি ভাল কাজ করেছে (যেগুলি যাদের আরম্ভীকৃত ডিবিএসসেটগুলির প্রয়োজন নেই), এবং অন্যরা ওপিতে বর্ণিত রানটাইম ত্রুটি ফেলে দেয়।


1

আপনি পরিষেবাটির নির্মাণকারীর ভিতরে ভান্ডারটি ইনজেকশন দিচ্ছেন তা নিশ্চিত করুন। এটা আমার জন্য এটি সমাধান। :: কপাল ধাক্কা ::


1

যদি আপনি শূন্য সংগ্রহে মান গণনা করার চেষ্টা করেন তবে এই ব্যতিক্রমটি ফিরে আসবে।

উদাহরণস্বরূপ নীচেরগুলি কাজ করে যখন ত্রুটিগুলি শূন্য হয় না, তবে যদি ত্রুটিগুলি শূন্য হয় তবে মানটি নাল হতে পারে না। প্যারামিটারের নাম: উত্স ব্যতিক্রম ঘটে।

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

পরিবর্তে নাল পরীক্ষা করে এই ব্যতিক্রম এড়ানো যায়।

if (graphQLResponse.Errors != null)

1

নিম্নলিখিত সমাধান সঙ্গে সমাধান

  1. উপর রাইট ক্লিক করুন edmxফাইলটিতে , এক্সএমএল সম্পাদক সহ ওপেন নির্বাচন করুন
  2. edmx:StorageModelsউপাদানটিতে সত্তাটি সন্ধান করুন
  3. অপসারণ DefiningQueryপুরোপুরি
  4. store:Schema="dbo"টু নামকরণSchema="dbo" (যদি থাকে)
  5. store:Nameসম্পত্তি সরান

স্কিমা = "ডিবিও" থেকে স্কিমা = "ডিবিও" - কী?
ভিনসেন্ট বাসকারেলো

0

এটি আমার ক্ষেত্রে যেমন নির্বোধ হতে পারে যেখানে সেভচেন্জেজ বিসিওজে ত্রুটি করছিল তখন ডিবিতে বিদেশী কী নেই এবং সমিতিগুলি ইডিএম টেবিলগুলিতে যুক্ত করা হয়েছিল। আমি ডিবিতে বিদেশী কীগুলি যুক্ত করেছি এবং ঠিক করার জন্য ইডিএম পুনরায় জেনারেট করেছি।

আমি যে ত্রুটিগুলি দেখছিলাম সেগুলি নিম্নরূপ: EDM বার্তার জন্য DBContext ব্যবহার করার সময় কেস 1 -> মানটি শূন্য হতে পারে না। প্যারামিটারের নাম: System.Linq.Enumerable.Any [টিএসোর্স] এ উত্স (আইনিম্যুয়াল 1 source, Func2 প্রিডিকেট )

কেস 2 -> ইডিএম মেসেজের জন্য অবজেক্ট কনটেক্সট ব্যবহার করার সময় = সত্ত্বা 'পরিচিতি' আপডেট করতে অক্ষম কারণ এটির একটি DefiningQuery রয়েছে এবং বর্তমান অপারেশনটিকে সমর্থন করার জন্য কোনও উপাদান এলিমেন্টে নেই।

(কাউকে সাহায্য করার ক্ষেত্রে এটি কেবল সেখানে ফেলে দিতে চেয়েছিল)।


0

এমভিসিতে, ভিউ স্ক্রিনটি কলিং পদ্ধতিটি যা নিয়ামক বা রেপোজিটরি সিগুলিতে থাকে এবং সিএসএইচটিএমএলে যে কোনও নিয়ন্ত্রণে রিটার্ন মান নির্ধারণ করে তবে সেই পদ্ধতিটি আসলে .সিএস / নিয়ামক হিসাবে প্রয়োগ করা হয় না, তারপরে সিএসএইচটিএমএল NUL প্যারামিটার ব্যতিক্রম ছুঁড়ে ফেলবে


0

সত্তা সম্পত্তির জন্য যখন আমার একটি অবৈধ প্রকার ছিল তখন আমি এই ত্রুটিটি পেয়েছি।

public Type ObjectType {get;set;}

যখন আমি সম্পত্তিটি সরিয়ে ফেললাম ত্রুটি দেখা দিয়েছিল।


0

আমার ক্ষেত্রে, আইআইএস-এ ওয়েব অ্যাপ্লিকেশনটি কনফিগার করার সময় সমস্যাটি পপ আপ হয়ে গেছে, যখন কোনও রেকর্ডে আপডেট কমান্ড বহিষ্কার করা হয়েছিল তখন এই ত্রুটি উত্পন্ন হয়েছিল।

এটি অ্যাপ_ডাটাতে একটি অনুমতি ইস্যু ছিল যা কেবলমাত্র পঠনযোগ্যতে সেট করে। ফোল্ডারে ডান-ক্লিক করুন, কেবল পঠনযোগ্য চেকবক্সটি চেক করুন এবং আপনার কাজ শেষ হয়েছে। যাইহোক, পরীক্ষার উদ্দেশ্যে, আমি লোকালডিবি ডাটাবেসটি ব্যবহার করছিলাম যা অ্যাপ_ডাটা ফোল্ডারে ছিল।


0

আমার ভুলটি পিতামাতার সাথে .তক্ষেত্রে অন্তর্ভুক্ত (গুলি => s.SubChildEntities) যোগ করতে ভুলে গিয়েছিল the

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

এটি লক্ষ করা উচিত যে ভিজ্যুয়াল স্টুডিও 2017 সম্প্রদায়ের ইন্টেলিসেন্স ল্যাম্বডা এক্সপ্রেশনটিতে সাবচিল্ড ইন্টিটিজস অবজেক্টটি। যদিও এটি সফলভাবে সংকলন এবং সম্পাদন করে।


0

আমি জানি যে ২০১৩ সালের প্রশ্নের দীর্ঘতম পথ, তবে যদি এএসপি.নেট 5 অ্যাপটি এএসপি.নেট কোরে স্থানান্তরিত করার সময় আপনার অলস লোডিং সক্ষম না হয় এবং তারপরে আপগ্রেড করার চেষ্টা করা হয় তবে এই লক্ষণটি দেখাতে পারে can সত্তা ফ্রেমওয়ার্ক কোর 2.x (ইএফ 6 থেকে)। সত্তা ফ্রেমওয়ার্ক কোর অলস লোডিং প্রক্সি সমর্থনটিকে একটি পৃথক প্যাকেজে সরিয়ে নিয়েছে , তাই আপনাকে এটি ইনস্টল করতে হবে।

এটি বিশেষত সত্য যদি আপনি সমস্ত লোড করেছেন এমন একটি সত্তা ফ্রেমওয়ার্ক কোর এসকিএল সার্ভার প্যাকেজ (যা সত্তা ফ্রেমওয়ার্কটি ঠিকঠাক করে তোলে)।

প্রক্সি প্যাকেজ ইনস্টল করার পরে, ডকস যেমন বলেছেন, .UseLazyLoadingProxies()DbContext অপশন বিল্ডারে (আপনার স্টার্টআপ ডিআই সেটআপ বিভাগে, বা যেখানে আপনি আপনার DbContext কনফিগার করেছেন), এবং ন্যাভিগেশনাল সম্পত্তি যা উপরের ব্যতিক্রমটি ছুঁড়ে ফেলেছিল তা ছুঁড়ে দেওয়া বন্ধ করবে, এবং সত্তা ফ্রেমওয়ার্ক 6 হিসাবে ব্যবহৃত হিসাবে ব্যবহৃত হবে।


আমি এই পথ নিচে শুরু এবং কিছু পরিস্থিতিতে এটা কাজ পারে, কিন্তু আমি প্রায় দ্রুত এই গাড়ীতে আঘাত stackoverflow.com/questions/41881169/...
infocyde

0

এক্স ইউনিতের সাথে আমারও একই সমস্যা ছিল। সমস্যাটি ছিল আমার ডাটাবেস সংযোগ নিয়ে। আপনার সংযোগের স্ট্রিংটি সঠিক কিনা তা পরীক্ষা করুন।


0

এবং, আমার ক্ষেত্রে, আমি ভুলভাবে আমার দুটি পৃথক কলামকে ডিবি কনটেক্সট কনফিগারেশনে সনাক্তকরণ হিসাবে নীচের মত সংজ্ঞায়িত করেছি,

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

ডাটাবেসে একটি সারি নিন এবং সমস্ত কলামটি এই "নুল" এর মতো সেই সারিতে নাল করুন ow এখনই সেই নুল মানটি ধরুন চেষ্টা করুন বা অন্যথায় চেষ্টা করুন।


এটি একটি ভয়ানক ধারণা
জেসন লোকী স্মিথ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.