নির্দিষ্ট নামযুক্ত সংযোগটি হয় কনফিগারেশনে পাওয়া যায়নি, সত্তা ক্লায়েন্ট সরবরাহকারীর সাথে ব্যবহারের উদ্দেশ্যে নয় বা বৈধ নয়


170

আমার একটি সত্তা কাঠামোর অবজেক্ট রয়েছে এবং আমি যখন এটি আমার প্রকল্পে connectionstring যুক্ত করি তখন বিভাগটিতে যুক্ত করা app.configহয় connectionstring, তবে যখন আমি নতুন তৈরি করতে entitycontextএবং এটি ব্যবহার করতে চাই তখন connectionstringএই ত্রুটিটি উপস্থিত হয়



4
লিঙ্কটির জন্য ধন্যবাদ, ক্রেগ। আমি এই থ্রেডটি রাখার পক্ষে ভোট দিই, কারণ শিরোনামটিই আমাকে মেটাডেটা এক্সেপশন ত্রুটি খুঁজে পেতে সহায়তা করেছিল।
jp2code

কনফিগারেশন ফাইলটি কোনও অদ্ভুত কারণে সংযোগ স্ট্রিংয়ের সাথে আপডেট না করলে আমার সাথে এটি ঘটেছিল।
P.Brian.Mackey

উত্তর:


217

আমি সন্দেহ করি যে আপনার সমস্যাটি এই সমস্যা থেকে আসছে যে আপনার সমাধানে আপনার একাধিক প্রকল্প রয়েছে এবং edmxফাইলগুলিতে আপনার সত্তা কাঠামোর স্টাফ রয়েছে এমন কোনও সমাধানের সূচনা প্রকল্প নয়। এই ক্ষেত্রে যদি EF app.configপ্রকল্পে সংযোগের স্ট্রিং বিদ্যমান থাকে , তবুও সিএলআর রানটাইম এ এটি সন্ধান করতে পারে না। উদাহরণস্বরূপ, আপনার সমাধানে যদি কোনও ওয়েব সাইট এবং কোনও ইএফ প্রকল্প থাকে তবে আপনাকে EF প্রকল্পের app.configথেকে আপনার ওয়েবসাইটের সংযোগের স্ট্রিংটি অনুলিপি করতে হবে web.config। মূলত, কোনও সংযোগ স্ট্রিং ডেটা প্রজেক্টের কনফিগার ফাইলে থাকা উচিত যা নেট থ্রেডগুলি সিএলআর (যেমন আপনার স্টার্টআপ প্রজেক্ট) দ্বারা শুরু হয়েছিল। যদি এটি আপনার ক্ষেত্রে না হয় তবে কেবল আপনার খুলুনedmxফাইল, তার পৃষ্ঠের ডান ক্লিক করুন, বৈশিষ্ট্য নির্বাচন করুন এবং সংযোগের স্ট্রিংটি অনুলিপি করুন এবং এটি আপনার app.configসংযোগ স্ট্রিং বিভাগে আটকান । এইভাবে আপনি নিশ্চিত করতে পারেন যে আপনার কনফিগারেশনে আপনার সঠিক রয়েছে।

সম্পাদনা:
আপনি এখানে অবজেক্টকন্টেক্সট কনস্ট্রাক্টরের ডকুমেন্টেশনটিতে দেখতে পাচ্ছেন , প্রথম প্যারামিটারটি সংযোগের নাম যা আপনার ইডিএম তৈরির সময় কোড উত্পন্ন হয়। যদি কোনওভাবে আপনার সংযোগের নামটির নাম পরিবর্তিত হতে থাকে, আপনাকে কেবল আপনার মডেলটিতে ডান ক্লিক করতে হবে এবং "ডেটাবেস থেকে মডেল আপডেট করুন ..." নির্বাচন করা উচিত, তবে এটি আপনার প্রতিবিম্বিত করার জন্য আপনার কনফাইং এবং ডিজাইনার আপডেট করার জন্য উইজার্ডটি অনুসরণ করুন পরিবর্তন.


1
হাই মোর্তেজা এবং আপনার উত্তরের জন্য ধন্যবাদ, তবে আমি পূর্বে ওয়েবকনফিগে কানেকশনস্ট্রিং সেকটিনটি অনুলিপি করেছিলাম, তবে ত্রুটিটি সমাধান করা হয় না, তবে যখন এনটেমোডেল.ডিজাইনার প্রতিস্থাপন করুন (পাবলিক এন্টি কনটেক্সট (): বেস ("নাম = এনটিসিঙ্কটেক্সট", এনটিটি কনটেক্সট ") )) এই কাজ করে এমন সংযোগের অংশটি শুভ করুন, কোনও idae
ব্যবহারকারীর 2121413

1
@ মোর্তিজা, যে প্রকল্পগুলিতে এক্সিকিউটিভ অ্যাসেমব্লিকে অ্যাপকনফাইগ নেই সেগুলির কি আপনার কাছে সমাধান আছে? আমার ক্ষেত্রে কলিং এক্সিকিউটেবল একটি ভিবি 6 অ্যাপ্লিকেশন যা আমার সমাবেশকে (যেখানে সত্তা অবজেক্টস রয়েছে) সিওএম ইন্টারপের মাধ্যমে কল করে।
পচনশীল ডেভ

4
এত সহজ, তবুও হতাশাবোধ। ভোট দিন দীর্ঘ লাইভ স্ট্যাকওভারফ্লো!
গ্রানাডা কোডার

3
আপনি যদি ডাব্লুসিএফ ব্যবহার করেন তবে আপনার পরিষেবা প্রকল্পে সংযোগের স্ট্রিংটি অন্তর্ভুক্ত করতে ভুলবেন না
নাথান

1
ধন্যবাদ মোর্তেজা, আমাকে অনেক সময় বাঁচিয়েছে!
ক্রিস

32

আপনার অ্যাপ্লিকেশনটিতে সংযোগের স্ট্রিংটি আপনার ওয়েবকনফাইগে অনুলিপি করতে হবে বা পুরো ফাইলটি প্রজেক্টে অনুলিপি করতে হবে যা আউটপুট প্রদর্শন করে। ফ্রেমওয়ার্কটি গ্রাস করার শর্তগুলির মধ্যে এটি একটি।


1
আপনার ওয়েবকনফিগে (সামনের প্রজেক্টে পাওয়া যাবে) কেবল একই সংযোগের স্ট্রিং (ডেটা অ্যাক্সেস প্রকল্পের মতো) যুক্ত করুন।
ডেনিশ

@ Musikero31 আমি EF ব্যবহার করি এবং কোডে সমস্ত সত্তা সংযোগের স্ট্রিং সংজ্ঞায়িত করি। এর সাথে সম্পর্কিত কোনও কনফিগারেশনে আমার কিছু নেই।
কীথ দাড়ি

আমি ডাল ফাইলগুলি একটি নতুন প্রকল্পে অনুলিপি করার পরে, আমি উপরের ত্রুটিটিও পেয়েছি। কনফিগার ফাইলগুলির কাছাকাছি তাকিয়ে আমি লক্ষ্য করেছি যে সংযোগের স্ট্রিংটি EF দ্বারা প্রতিস্থাপিত হয়েছিল। আমি নতুন প্রকল্পে সঠিক সংযোগের স্ট্রিংটি ম্যানুয়ালি অনুলিপি করতে / পেরেছি এবং এটি কার্যকর হয়েছে।
রবি রাম

9

আমি যখন আমার সমাধানে একাধিক প্রকল্পের দ্বারা ব্যবহৃত কাস্টম ডেটাবেস যুক্তি একটি .dll এ দেওয়ার চেষ্টা করেছি তখন আমি এই সমস্যার মধ্যে পড়েছিলাম।

.Dll- এ সঠিক app.config ফাইল থাকলেও এটি কার্যকর হয়নি। সত্তা ফ্রেমওয়ার্কগুলি .exe এর app.config- এ সংযোগের তথ্য চেয়েছিল। সেখানে তথ্য অনুলিপি করা ঠিক ঠিক কাজ করেছে।

সরাসরি .edmx এ সংযোগের স্ট্রিংটি পেস্ট করার মুর্তেজার সমাধান আমার পক্ষে কাজ করে নি, কারণ এটি আমাকে সেখানে মানটি আটকাতে দেয় না - যদিও আমি এটি করতে সক্ষম হলাম তা স্পষ্টভাবে।


3
যদিও আমার এক্সির ডিরেক্টরিতে কেবল একটি অ্যাপকনফাইগ ছিল (এবং সেই ডিরেক্টরিতে এটি ছিল একমাত্র কনফিগার ফাইল) এটি এটি পড়বে না। আমাকে আমার এক্সেক্স.এক্সে.কনফিগ
মারিও

6

হাই আমার এই সমস্যা ছিল এবং এটি আমাকে বাদাম তৈরি করছিল। যাইহোক অবশেষে সমস্যাটি কী তা বুঝতে পেরেছিলাম। প্রথম কাজ আপনাকে যা করতে হবে তা নিশ্চিত করুন যে connectionstringsমধ্যে app.configএবং web.configএকই। তারপরে আপনাকে অবশ্যই .edmxফাইলটিতে ডাবল ক্লিক করতে হবে যাতে আপনি টেবিলগুলি দেখতে পারেন। একবার আপনি টেবিলগুলির নিকটে অন্য কোথাও ক্লিক করলেও টেবিলগুলিতে নয় এবং বৈশিষ্ট্যে যান। ড্রপডাউন তালিকা থেকে নির্বাচন করুন ConceptualEntityModelএবং সত্তা ধারক নাম অনুসন্ধান করুন এবং এটি ভাল মনে রাখবেন।

এরপরে এডিএমএক্স ফাইলের ডিজাইনারের কাছে যান এবং কনস্ট্রাক্টরগুলি খুলুন। (ডিজাইনার এডিএমএক্স ফাইলের সাবফোল্ডার) বিএএসই প্যারামিটারে কনস্ট্রাক্টরের দুটি পরামিতি থাকতে হবে

public DBEntities() : base("name=DBEntities", "DBEntities")
    {
        this.ContextOptions.LazyLoadingEnabled = true;
        OnContextCreated();
    }

এই হল তাদের একজন. প্রথম প্যারামিটারে ফাইলটি যে প্রকল্প ফাইলটিতে রয়েছে .edmxতার নাম থাকা উচিত The দ্বিতীয় প্যারামিটারে অবশ্যই পূর্বে উল্লিখিত বৈশিষ্ট্যগুলির থেকে সত্তা ধারকটির নাম থাকা উচিত। সমস্ত কন্সট্রাক্টরগুলির সাথে এটির ব্যবস্থা করতে ভুলবেন না:base("", "")

অন্ততপক্ষে আমার সমস্যাটি ছিল এবং আমার সমস্যাটি এরকমভাবে সমাধান করা হয়েছিল। আমি আশা করি আপনি এটির মতো সমাধান করতে পারেন।


6

আমার এই সম্পর্কে একটি পার্থক্য ছিল যে কারও কাছে এটি আবশ্যক বলে মনে হয় না।

আমার বেশ কয়েকটি মডেল এবং একটি ইউনিট পরীক্ষা সমেত একটি টেস্ট প্রকল্প ছিল project পরীক্ষা প্রকল্পটি কাজ করছিল, কিন্তু তারপরে ওপিতে উল্লিখিত ত্রুটিটি বন্ধ করে। আমি ইডিএমএক্স ফাইলটির কোনও নাম পরিবর্তন বা সরানো কাজ করিনি।

কনফিগ ফাইলগুলির সাথে তুলনা করে অনেকগুলি পরামর্শ দেওয়া হয়েছিল, কিন্তু আমার প্রকল্পে মোটেই কিছুই ছিল না।

শেষ পর্যন্ত, আমি আমার পরীক্ষার প্রকল্পে মূল প্রকল্প থেকে app.config ফাইলটি অনুলিপি করেছিলাম এবং তারপরে এটি কাজ করে। এটি সঠিক পদক্ষেপ, বা অতিরিক্ত মডেল যুক্ত হওয়ার সময় রক্ষণাবেক্ষণের বিষয়গুলি উপস্থাপন করবে কিনা তা আমি জানি না, তবে কমপক্ষে আমার ইউনিট পরীক্ষাগুলি এখন আবার সঠিকভাবে চলছে।


যেহেতু আমি এটি পোস্ট করেছি, আমি বুঝতে পেরেছিলাম যে অন্য কোনও প্রকল্পের অ্যাপ্লিকেশন কনফিগ ফাইলে একটি লিঙ্ক তৈরি করা ভাল। তবে তবুও, অন্য কোনও পদ্ধতির মূল সমস্যাটি ঠিক করার জন্য কাজ করবে যখন কোনও কনফিগার ফাইল নেই।
এস বাগি

4

যদিও মুর্তজা মানাভি'র উত্তরটি এই সমস্যার সমাধান করে, অন্য সমাধান হ'ল গতিশীলভাবে সংযোগের স্ট্রিং তৈরি করা এবং এটি আপনার অবজেক্ট কনটেক্সট-এর জন্য কনস্ট্রাক্টরকে দেওয়া:

public static string CreateConnectionString()
{
    var assemblyPath = Assembly.GetExecutingAssembly().Location;
    string assemblyLocation = Path.GetDirectoryName(assemblyPath);
    string dbPath = Path.Combine(assemblyLocation, "YourDatabase.sdf");
    var sqlBuilder = new SqlConnectionStringBuilder { DataSource = dbPath };

    var entityBuilder = new EntityConnectionStringBuilder
    {
        ProviderConnectionString = sqlBuilder.ConnectionString,
        Provider = "System.Data.SqlServerCe.3.5",
        Metadata = @"res://*/YourModel.csdl|
                 res://*/YourModel.ssdl|
                 res://*/YourModel.msl"
    };

    return entityBuilder.ToString();
}

// Snip...

var entityContext = new YourObjectContext(CreateConnectionString());

এটি আপনার স্টার্টআপ প্রকল্পের app.config এ সংযোগের স্ট্রিংয়ের তথ্য অনুলিপি করার প্রয়োজনীয়তা হ্রাস করে যা অন্তত আমার ক্ষেত্রে, কাম্য ছিল না।


4

আমি সংযোগ স্ট্রিংয়ের বৈশিষ্ট্য হিসাবে প্রোভাইডারনাম = "সিস্টেম.ডাটা.এন্টিটি ক্লায়েন্ট" যুক্ত করতে ভুলে গিয়েছি। এটি এই ত্রুটির ফলে তাই

<add name="connectionName" connectionString="metadata=res://*/..." providerName="System.Data.EntityClient" />

পরিবর্তে

<add name="connectionName" connectionString="metadata=res://*/..." />

2

আমি সবেমাত্র পেয়েছি যে ওয়েবসাইটটি মূল থেকে দুটি স্তরের ভিএস 2010 থেকে আইআইএসে কোনও অ্যাপ তৈরি করা থাকলে এই ত্রুটি ঘটবে। কেন এটি ঘটে তা নিশ্চিত নয়, আরও তদন্ত করা দরকার। উদাহরণস্বরূপ, আপনার অ্যাপ্লিকেশনটি যদি এই পথে থাকে: আপনার আইআইএস সাইটে ভার্চুয়াল ডিরেক্টরি /admin/advertiserনা থাকলে ত্রুটিটি উপস্থিত হতে পারে /admin

আমি যা করলাম তা adminআমার .../intepub/wwwrootত্রুটির জন্য একটি খালি ডিরেক্টরি তৈরি করা হয়েছিল ।

আপনি দেখতে পাবেন যে আপনি উপরের পদক্ষেপটি না করা পর্যন্ত আপনি ডিবাগিং শুরু করতে পারবেন না।

অতীতে আমাদের দলে আমাদের এই সমস্যা ছিল, এটি মনে রাখতে কিছুটা সময় লেগেছিল তবে আমরা এটির আগে ঠিক এটি ঠিক করেছিলাম।


1

আমি এনটিয়ার আর্কিটেকচার ব্যবহার করছি এবং একই সমস্যা পেয়েছি তবে এইটি আমাকে সাহায্য করবে opeএই আপনাকে সাহায্য করবে। প্রথমে একই আছে connection stringতোমার উপর librariesযেখানে আপনি মত ডিবি অ্যাক্সেস করতে পারেন app.configএবং web.config যে পরে আপনি কেবল একটি ওভারলোড কন্সট্রাকটর মধ্যে .edmx (Model.context.cs) ফাইল যোগ যে এখন আপনি দুটি কন্সট্রাকটর এক ডিফল্ট এবং অন্যটি তোমার দর্শন লগ করা মাত্র জোড়া হয়েছে (আছে ওভারলোড)।

        public YourEntityName(string connString)
            : base(connString)
        {
        }

1

আমার একটি ক্লাস লাইব্রেরি ছিল যা EF এর সাথেও কাজ করতে চায় না। আমি আমার ক্লাস লাইব্রেরি থেকে এক্সপ প্রকল্পে app.config (বা কেবল সংযোগের অংশটি) অনুলিপি করার পরে সংযোগটি ভাল কাজ করেছে! সম্ভবত কনফিগার ফাইলটি এক্সি প্রজেক্টের মতো একই ফোল্ডারে থাকবে বলে আশা করা হচ্ছে এবং এটি খুঁজে পাওয়া যায় নি। ক্লাস লাইব্রেরি প্রকল্পে কোনও কনফিগার ফাইল ব্যবহার করার সময় সর্বদা অতিরিক্ত সতর্কতা অবলম্বন করুন!


0

ঠিক আছে ... এই সমস্যাটি খুব সাধারণ (বোবা) কারণেও হতে পারে ... আমি অন্য একটি প্রকল্প থেকে একটি ফাইল অনুলিপি করেছি এবং সত্তা ডেটা উত্সে কানেকশনস্ট্রিং পরিবর্তন করতে ভুলে গিয়েছিলাম ... যেমন আমি প্রকল্পের শুরুতে এসেছিলাম এবং ঘটেছিল লগইন পৃষ্ঠায়, আমি ভেবেছিলাম এটি কনফিগারেশনে কিছু ছিল তবে এটি ছিল ভুল সংযোগের স্ট্রিং নাম (এবং ডিফল্টকন্টেইনারনেম)।

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