মেটাডেটা এক্সেপশন: নির্দিষ্ট মেটাডেটা রিসোর্স লোড করতে অক্ষম


681

হঠাৎ করেই আমি MetadataExceptionআমার উত্পন্ন ObjectContextক্লাসটি ইনস্ট্যান্ট করে দিচ্ছি । অ্যাপ.কনফিগের সংযোগের স্ট্রিংটি সঠিক দেখাচ্ছে - এটি কাজ করার পর থেকে কোনও পরিবর্তন হয়নি - এবং আমি কোনও পরিবর্তন ছাড়াই অন্তর্নিহীন ডাটাবেস থেকে একটি নতুন মডেল (এডএমএক্স-ফাইল) পুনরায় তৈরির চেষ্টা করেছি।

কারো কোন ধারণা আছে?

আরও বিশদ: আমি কোনও সম্পত্তি পরিবর্তন করি নি, কোনও আউটপুট অ্যাসেমব্লির নাম পরিবর্তন করি নি, আমি সমাবেশে ইডিএমএক্স এম্বেড করার চেষ্টা করি নি। আমি ফিরে না আসা পর্যন্ত আমি কাজ ছেড়ে 10 ঘন্টা অপেক্ষা করেছি। এবং তখন এটি আর কাজ করে না।

আমি ইডিএমএক্স পুনরুদ্ধার করার চেষ্টা করেছি। আমি প্রকল্পটি পুনরুদ্ধার করার চেষ্টা করেছি। এমনকি আমি স্ক্র্যাচ থেকে ডাটাবেস পুনরায় তৈরি করার চেষ্টা করেছি। ভাগ্য নেই, যাই হোক না কেন।


14
যদি 200k এর বেশি ভিউ রয়েছে এমন একটি নির্দিষ্ট পণ্য সম্পর্কে কোনও প্রশ্ন যদি SO করে তোলে তবে ব্যবহারকারীরা যেভাবে প্রত্যাশা করছেন সেই পণ্যটি সেইভাবে কাজ করছে না। আমি মাইক্রোসফ্ট এই ঠিকানা দেখতে চাই। আপনার কাছে সময় থাকলে তাদের পরামর্শ দেওয়ার জন্য এখানে একটি লিঙ্ক দেওয়া হয়েছে: ভিজ্যুয়ালস্টুডিও.ইউসারওয়াইজ / ফোরামস / 121579- ভিজুয়াল- স্টুডিও
টনি এল।

আমার সমস্যা সমাধান হয়েছে, সংযোগ-স্ট্রিংয়ের পরিবর্তে ডিবি-স্তর প্রকল্প থেকে অনুলিপি করা হয়েছে।
হার্ডিক

উত্তর:


856

এর অর্থ হল যে অ্যাপ্লিকেশনটি EDMX লোড করতে অক্ষম। বেশ কয়েকটি জিনিস যা এর কারণ হতে পারে।

  • আপনি হয়ত মডেলটির মেটাডেটা আর্টিফ্যাক্ট প্রসেসিং প্রপার্টি পরিবর্তন করে আউটপুট ডিরেক্টরিতে অনুলিপি করতে পারেন।
  • সংযোগের স্ট্রিংটি ভুল হতে পারে। আমি জানি আপনি বলেছিলেন যে আপনি এটি পরিবর্তন করেন নি, তবে আপনি যদি অন্য জিনিস পরিবর্তন করে থাকেন (বলুন, কোনও সমাবেশের নাম) তবে এটি ভুল হতে পারে।
  • আপনি সমাবেশে ইডিএমএক্স এম্বেড করার জন্য একটি পোস্ট-সংকলন টাস্কটি ব্যবহার করছেন, যা কোনও কারণে আর কাজ করছে না।

সংক্ষেপে, একটি সঠিক উত্তর দেওয়ার জন্য আপনার প্রশ্নে সত্যিকারের পর্যাপ্ত বিবরণ নেই তবে আশা করি এই ধারণাগুলি আপনাকে সঠিক পথে পৌঁছে দেবে।

আপডেট: আমি সমস্যা সমাধানের জন্য আরও সম্পূর্ণ পদক্ষেপ সহ একটি ব্লগ পোস্ট লিখেছি ।


70
গতবার সামগ্রীর সাথে তুলনা করার চেষ্টা করার পরেও সংযোগ স্থাপনটি ভুল ছিল
জে। স্টিন

16
এটা আমার জন্য সংযোগ ব্যবস্থা ছিল। আপনার যখন ইন্টিগ্রেশন টেস্টগুলি থাকে তবে তার নিজস্ব অ্যাপ.config এ সংযোগ স্থাপন করা দরকার হয়, আপনি যখন আপনার এডএমএক্স আপডেট করেন তখন জিনিসগুলি সিঙ্কের বাইরে চলে যেতে পারে।
রায়

11
ঠিক আছে, আমি কেবল "এম্বেড" সেট করে এটি ঠিক করেছি; সংকলন, তারপরে একে অন্যটির সাথে পুনরায় সেট করা। এটি আমার সমস্যার সমাধান করেছে।
শিমি ওয়েটজ্যান্ডলার

6
একই সমস্যা ছিল, আপনার সমাধানটি চেষ্টা করে, +1 দিতে চেয়েছিল, বুঝতে পেরেছি আমি ইতিমধ্যে এটি করেছি did আমি এমনকি এই সমস্যাটি আগে মনে করি না;)। এবার আমার ক্ষেত্রে এটি ক্লাস লাইব্রেরিতে এডএমএক্স সহ সঠিক সংযোগের স্ট্রিং ছিল এবং যখন এটি ব্যবহার করা হয়েছিল তখন ওয়েব অ্যাপ্লিকেশনটিতে ভুল ছিল।
এপিসোডেক্স

9
দুর্দান্ত গাইড আমার জন্য, আমি অন্য সংযোগের স্ট্রিংটি অনুলিপি করলাম যা ব্যবহার করেছিল রেজ: // * / ডাটাবেস.মাইমোডেল 2 ..., যখন আমি সত্যিই রেজিস চাইতাম: // * / মাইমোডেল 1 ... (ডেটাবেস আমার ইন্টিগ্রেশন টেস্ট প্রকল্পের ভিতরে একটি ফোল্ডার)
এমরাগিন্স

360

এই সমস্যাটির সাথে এই সামান্য পরিবর্তন সাহায্য করে।

আমার সাথে সলিউশন 3 টি প্রকল্প রয়েছে।

connectionString="metadata=res://*/Model.Project.csdl|res://*/Model.Project.ssdl|res://*/Model.Project.msl;

পরিবর্তন

connectionString="metadata=res://*/;

11
এটি আমার জন্য এটি স্থির করেছে, কিন্তু হেক মানে কী?
ল্যান্স ফিশার


4
@ জোকুল: না, এটি অনেক ক্ষেত্রে কার্যকর হবে না এবং অন্যদের মধ্যে ধীর হবে। কেন আমার ব্লগ পোস্ট পড়ুন।
ক্রেগ স্টান্টজ

6
আমার .edmx কে মডেল ফোল্ডারে সরানো হয়েছে এবং সংযোগের স্ট্রিং আপডেট করতে ভুলে গেছে। দুর্দান্ত পয়েন্টার ধন্যবাদ। আমাকে বের করতে কয়েক ঘন্টা লাগত।
5:30 এ মুরগ

11
আপনি স্যার একটি ক্ষীণ মাইক্রোসফ্ট কর্মচারী খুব মিসড গ্রাহক থেকে সংরক্ষণ করেছেন।
মাফিন ম্যান

115

যখন এইডএমএক্স কোনও প্রকল্পে থাকে আপনি অন্য কোনও ক্ষেত্রে এটি ব্যবহার করছেন তখন আপনি এই ব্যতিক্রমটি পেতে পারেন।

কারণ Res://*/ একটি ইউরি যা বর্তমান সমাবেশে সংস্থানসমূহের দিকে ইঙ্গিত করে। যদি এডএম কোডটি ব্যবহার করছে এটি থেকে কোনও ভিন্ন সমাবেশে সংজ্ঞায়িত করা হয়, তবে: // * / কাজ করছে না কারণ উত্সটি খুঁজে পাওয়া যাচ্ছে না।

'*' নির্দিষ্ট করার পরিবর্তে, আপনাকে এর পরিবর্তে সমাবেশের পুরো নাম সরবরাহ করতে হবে (সর্বজনীন কী টোকেন সহ)। উদাহরণ:

res://YourDataAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=abcdefabcedf/YourEdmxFileName.csdl|res://...

সংযোগের স্ট্রিংগুলি তৈরি করার একটি ভাল উপায় হ'ল এন্টি কানেকশন স্ট্রিংবিল্ডার সহ:

public static string GetSqlCeConnectionString(string fileName)
{
    var csBuilder = new EntityConnectionStringBuilder();

    csBuilder.Provider = "System.Data.SqlServerCe.3.5";
    csBuilder.ProviderConnectionString = string.Format("Data Source={0};", fileName);

    csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", 
        typeof(YourObjectContextType).Assembly.FullName);

    return csBuilder.ToString();
}

public static string GetSqlConnectionString(string serverName, string databaseName)
{
    SqlConnectionStringBuilder providerCs = new SqlConnectionStringBuilder();

    providerCs.DataSource = serverName;
    providerCs.InitialCatalog = databaseName;
    providerCs.IntegratedSecurity = true;

    var csBuilder = new EntityConnectionStringBuilder();

    csBuilder.Provider = "System.Data.SqlClient";
    csBuilder.ProviderConnectionString = providerCs.ToString();

    csBuilder.Metadata = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl",
        typeof(YourObjectContextType).Assembly.FullName);

    return csBuilder.ToString();
}

যদি আপনি এখনও ব্যতিক্রমের মুখোমুখি হন তবে অ্যাসেম্বলিটি রিফ্লেক্টারে খুলুন এবং আপনার .csdl, .ssdl এবং .msl ফাইলগুলির জন্য ফাইলের নামগুলি পরীক্ষা করুন। মেটাডেটা মানতে নির্দিষ্ট হওয়াতে যখন সংস্থানগুলির আলাদা আলাদা নাম থাকে, তখন এটি কার্যকর হবে না।


8
আপনি যদি আপনার সমাবেশে নেমস্পেস ব্যবহার করেন তবে দয়া করে বিবেচনা করুন যে "আপনারএডএমএক্সএফএলনেম" অবশ্যই যোগ্য নাম হতে হবে " তবে আপনাকে অবশ্যই আপনার সমাবেশের নামের সমান নেমস্পেসের অংশটি সরিয়ে ফেলতে হবে।
মার্সেল

5
এমএসডিএন বলছে দ্বিতীয় অনুচ্ছেদটি ভুল। "আপনি যখন ওয়াইল্ডকার্ড (*) ব্যবহার করেন, সত্তা ফ্রেমওয়ার্ককে সঠিক নাম সহ সংস্থানগুলির জন্য সমস্ত অ্যাসেমব্লির মধ্যে নজর রাখতে হয়।"
ক্রেগ স্টান্টজ

আমি নিশ্চিত যে নামস্থানটি প্রাসঙ্গিক নয়, তবে এম্বেড করা ফাইলের পথটি। এমনকি যদি আপনি সম্পর্কিত edmx ফাইলের * .Designer.cs ফাইলটি পরীক্ষা করে দেখেন এবং স্বয়ংক্রিয়ভাবে উত্পন্ন শ্রেণীর নাম স্থানটি মাইকম্পানি ... যাই হোক না কেন, এটি আপনার ব্যবহার করা উচিত নয়। পরিবর্তে পাথ হ'ল সমাবেশ নাম, সমাধান ফোল্ডার (গুলি) নাম / ফাইলের নাম। উদাহরণস্বরূপ: "মেটাডেটা = রেজোলিউড: // * / সত্তা মডেল <<ফাইল ফাইল> .সিএসডিএল |" + "পুনরায়: // * / সত্তা মডেলস <<ফাইল ফাইল> এসএসডিএল |" + "রেজ: // * / সত্তা মডেলস। <ফাইল ফাইল> এমএসএল;"
ড্যানিয়েল

1
@ ড্যানিয়েল, এটি বেশিরভাগ ক্ষেত্রেই সঠিক, তবে মনে রাখবেন যে নামস্থান এবং এমবেড করা ফাইলের পথটি কখনও কখনও একই থাকে। নিশ্চিত হওয়ার জন্য আপনাকে রিফ্লেক্টরের (বা এর বিকল্প বিকল্প) সন্ধান করতে হবে।
ক্রেগ স্টান্টজ

এটা দেখে মনে হচ্ছে এটি শুধুমাত্র সমাবেশ নাম ব্যবহার করে কাজ করে, সংস্করণ ছাড়া, publickeytoken, ইত্যাদি:res://MyAssembly/folder.<filename>.csdl...
ইভান ফেরার ভিলা

67

আমারও তেমন ত্রুটি হয়েছিল আমি প্রকল্পটি পুনরায় তৈরি করেছি (দীর্ঘ গল্প), এবং পুরানো প্রকল্প থেকে সমস্ত কিছু টেনে নিয়ে এসেছি। আমি বুঝতে পারি নি যে আমার মডেল আগে 'মডেল' নামে পরিচিত একটি ডিরেক্টরিতে ছিল এবং এখন 'মডেলস' নামে একটি ডিরেক্টরিতে ছিল। একবার আমি আমার ওয়েবে সংযোগ পরিবর্তন করেছি ig কনফিগ এ থেকে:

<add name="RecipeManagerEntities" connectionString="metadata=res://*/Model.Recipe.csdl 

এটি:

<add name="RecipeManagerEntities" connectionString="metadata=res://*/Models.Recipe.csdl

সবকিছুই কাজ করেছে (পরিবর্তিত Modelহয়েছে Models)। নোট করুন যে আমাকে এই স্ট্রিংয়ে এই তিনটি স্থান পরিবর্তন করতে হয়েছিল।


2
আমি আমার সত্ত্বা ফ্রেমওয়ার্ক মডেলটি মডেল থেকে ডএল-এ স্থানান্তরিত করেছি। কিন্তু তারপরে আমি যখন লিনক প্রিডিকেট বিল্ডার পরীক্ষা করার জন্য পরীক্ষার প্রকল্পে একটি পরীক্ষা লিখেছিলাম (এক সপ্তাহ পরে)। আমি এই ত্রুটি পেয়েছি। মূল প্রকল্পের ওয়েবকনফিগে এটি কীভাবে দেখেছিল তা দিয়ে আমি পরীক্ষার প্রকল্পগুলি অ্যাপকনফাইগ সংশোধন করেছি - যেমন আপনি তিনটি জায়গায় বলেছেন। সুতরাং আপনার সহজ উত্তর আমাকে ট্র্যাক পেয়েছে।
প্যাট্রিক লিন্ডস্ট্রোম

হ্যাঁ ধন্যবাদ - আপনার ফাইলের নাম পরীক্ষা করুন check একরকম আমার পুরনো নাম ছিল।
পিটারএক্স

7
দুই মধ্যে একটি পার্থক্য আছে?!
এরউইন রুইজাকার্স

2
@ এরউইনরুইজাক্কার্স মডেল বনাম মডেলস
মার্ক

ক্রেগের ব্লগটি পড়ার পরেও আমি একই কাজ করেছি, তবে এটি শিখার জন্য +1 শিখার জন্য এটি মনে রাখা গুরুত্বপূর্ণ যে আপনার "সত্তা" শ্রেণীর পাঠাগারটিতে করা পরিবর্তনগুলি স্বয়ংক্রিয়ভাবে প্রজেক্টগুলির কনফিগার ফাইলগুলিতে তৈরি হয় না যা এটি উল্লেখ করে। / দীর্ঘশ্বাস খুশি আমি একা নই।
ruffin

26

এবং রিফ্লেক্টর ছাড়াই মডেলের নাম পরীক্ষা করার একটি দ্রুত উপায় .... ডিরেক্টরিটি সন্ধান করুন

... অবজেক্ট / {কনফিগার আউটপুট} / এডিএমএক্সআরসোর্সটো তো এম্বেড

এবং .csdl, .msl এবং .ssdl রিসোর্স ফাইলগুলি আছে কিনা তা পরীক্ষা করে দেখুন। যদি তারা একটি উপ ডিরেক্টরিতে থাকে তবে উপ-ডিরেক্টরিটির নামটি অবশ্যই মডেলের নামের সাথে যুক্ত করা উচিত।

উদাহরণস্বরূপ, আমার তিন রিসোর্স ফাইল একটি উপ-ডিরেক্টরির মধ্যে হয় ডেটা , তাই আমার সংযোগ স্ট্রিং হতে হয়

metadata = res: // * / Data .MyModel.csdl | res: // * / Data .MyModel.ssdl | res: // * / Data .MyModel.msl;

(বনাম মেটাডেটা = রেজোলিউজ: //*/MyModel.csdl | res: //*/MyModel.ssdl | res: //*/MyModel.msl;)।


এটি হ'ল আমার সমস্যা। এই উপর কয়েক ঘন্টা হারিয়েছেন। এই সহজ ব্যাখ্যার জন্য আপনাকে অনেক ধন্যবাদ
ফার্নান্দো কারভালহোসা

দুর্দান্ত উত্তর, আসলে আপনার স্ট্রিংটি কীভাবে তা সন্ধান করতে হবে তা ব্যাখ্যা করে। এবং দেখায় যে সাবফোল্ডারদের আছে '। সীমানা হিসাবে এবং 'or' বা '/' হিসাবে নয়।
cjb110

16

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

App.config:

<add name="SCMSEntities" connectionString="metadata=res://*/Model.SMCSModel.csdl|res://*/Model.SMCSModel.ssdl|res://*/Model.SMCSModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SANDIEGO\sql2008;initial catalog=SCMS;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" />

Web.config:

<add name="SCMSEntities" connectionString="metadata=res://*/Model.SCMSModel.csdl|res://*/Model.SCMSModel.ssdl|res://*/Model.SCMSModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SANDIEGO\sql2008;initial catalog=SCMS;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />

এটি কী ঠিক করেছিল এটি কেবল অ্যাপকনফিগ স্ট্রিংটি অনুলিপি করা হয়েছিল (শেষে "ছোট্ট পার্থক্যটি লক্ষ্য করুন -" App=EntityFramework"এটি চেয়েছিল" application name=EntityFramework" এর পরিবর্তে" " ওয়েবকনফাইগে ) এবং সমস্যাটি সমাধান করা হয়েছিল। :)


1
ধন্যবাদ, আসলেই এটি আমার সমস্যা ছিল। আমার 1 টি প্রকল্প ছিল যা EF এবং অন্য প্রকল্প ডাব্লুসিএফ দিয়ে ডিবি অ্যাক্সেস করে। প্রথম প্রকল্পের নাম পরিবর্তন করার পরে, আমার প্রথম প্রকল্পের অ্যাপকনফাইগে সংযোগটি পরিবর্তন করা হয়েছে। সুতরাং আমাকে প্রকল্পটিতে ওয়েলকনফিগে ডাব্লুসিএফের সংযোগের স্ট্রিং পরিবর্তন করতে হয়েছিল :)
ভোলকান

এমএসডিএন ডকুমেন্টেশন থেকে ডকস.মাইক্রোসফট.এইন.ইউ / ডটনেট / The .NET Framework data provider for SQL Server (SqlClient) supports many keywords from older APIs, but is generally more flexible and accepts synonyms for many of the common connection string keywords.ফ্রেমওয়ার্ক / ডেটা / অ্যাডোনেট/… : সত্তা ফ্রেমওয়ার্ক সংযোগের স্ট্রিংগুলি সেই নমনীয়তাটি ভাগ করে না, সুতরাং আপনার অবশ্যই আশা করা কীওয়ার্ডগুলি ব্যবহার করতে হবে।
সানক্যাট 2000

13

আমারটি ঘটেছে যখন আমি দুর্ঘটনাক্রমে এডএমএক্স ফাইলের বিল্ড অ্যাকশনটি (আইডিইতে সম্পত্তিগুলির অধীনে প্রদর্শিত হয়) 'এন্টিডিপ্লোয়' থেকে 'কিছুই নয়' তে স্যুইচ করেছিলাম। অ্যান্টিডিডপ্লাই হ'ল আপনার জন্য মেটাডেটাটি জনপ্রিয় করে তোলে: দেখুন http://msdn.microsoft.com/en-us/library/cc982037.aspx


এটি আমার স্থির ছিল - আমি আমার এডিএমএক্সের নাম পরিবর্তন করে রেখেছি old আমার ইস্যু :)
এথ0

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

এটি আমার জন্য সমাধান ছিল; .NET স্ট্যান্ডার্ডে আপগ্রেড করার প্রক্রিয়ায় আমি সেই সেটিংটি হারিয়ে ফেলেছি। আমার বিচক্ষণতা বাঁচানোর জন্য আপনাকে ধন্যবাদ!
নেদারগ্রানাইট

11

নতুন .edmx ডিজাইনার তৈরি করার আগে যখন আমি সমাধানটি পরিষ্কার না করি তখন আমার সাথে এটি ঘটে। আপনি নতুন .edmx ডিজাইনার তৈরি করার আগে কেবল সমাধান পরিষ্কার করতে ভুলবেন না। এটি আমাকে এইটির সাথে আরও অনেক সমস্যা এড়িয়ে যেতে সহায়তা করে। আপনি ভিজ্যুয়াল স্টুডিওতে নতুন হয়ে থাকলে ন্যাভিগেশন বিশদ বিবরণ দিন।

ক্লিক করুন-> বিল্ড-> পরিষ্কার সমাধান

তারপরে ক্লিক করুন-> বিল্ড-> পুনর্নির্মাণ সমাধান

আশাকরি এটা সাহায্য করবে. ধন্যবাদ সবাইকে


8

আমি এটি দিয়ে একটি সুখী 30 মিনিট অতিবাহিত করেছি। আমি সত্তাগুলি অবজেক্টের নামকরণ করেছি, কনফিগার ফাইলে প্রবেশের নাম দিয়েছি, তবে আরও কিছু আছে ... আপনাকে সিএসডিএল-তেও রেফারেন্স পরিবর্তন করতে হবে

খুব সহজেই মিস করা - আপনি যদি নাম পরিবর্তন করে রাখেন তবে নিশ্চিত হয়ে নিন যে আপনি সবকিছু পেয়েছেন ....


6

আমারও একই সমস্যা ছিল। আমি আমার প্রতিবিম্বিত dll এর প্রতিফলকের সাথে নজর রেখেছি এবং দেখেছি যে সংস্থানটির নামটি ঠিক ছিল না। আমি নাম পরিবর্তন করেছিলাম এবং এখন এটি দেখতে ভাল লাগছে।


6

আমার ক্ষেত্রে, এটি edmx ফাইলের বৈশিষ্ট্যগুলি পরিবর্তন করে সমাধান করা হয়েছে।

  1. এডিএমএক্স ফাইলটি খুলুন
  2. ইডিএমএক্স ডিজাইনারের যে কোনও জায়গায় ডান ক্লিক করুন
  3. বৈশিষ্ট্য চয়ন করুন
  4. "মেটাডাটা আর্টিফ্যাক্ট প্রসেসিং" নামে পরিচিত সম্পত্তি "আউটপুট অ্যাসেমব্লিতে এম্বেড করুন" এ আপডেট করুন

এটি আমার জন্য সমস্যার সমাধান. সমস্যাটি হ'ল, যখন ধারক মেটা ডেটা সন্ধান করার চেষ্টা করেন, এটি এটি খুঁজে পায় না। সুতরাং কেবল একই সমাবেশে এটি তৈরি করুন। অন্য কোনও সমাবেশে আপনার এডিএমএক্স ফাইলগুলি থাকলে এই সমাধানটি কার্যকর হবে না


+1,000,000 এটি আমার জন্য আজ অন্তর্নিহিত সমস্যা। কোনও পণ্যের নাম স্থান এবং সংহত সমাবেশগুলিকে পুনর্গঠনের ব্যথা।
মাইক 14

6

আমি এই ত্রুটিটিতে একটি পুরো দিন কাটিয়েছি

আপনি যদি কাজ করছেন n-tear architecture

অথবা আপনি ডেটা অ্যাক্সেসলায়ার রূপে separate Modelsউত্পন্ন করার চেষ্টা করেছেনEDMXDomainModelLayer

সম্ভবত আপনি এই ত্রুটি পাবেন

  1. প্রথম সমস্যা সমাধান ধাপে নিশ্চিত সংযোগ স্ট্রিং করা হয় webconfig (UILayer)এবং appconfig (DataAccessLayer)একই
  2. দ্বিতীয়টি যা অত্যন্ত গুরুত্বপূর্ণ connection string

    connectionString="metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provid.....

    যা সমস্যা

পৃথিবীর যেখান থেকে আমি পেলাম Modelবা আমার সংযোগের স্ট্রিংয়ে সেগুলি .csdl তারা কোথায়

এখানে আমি আমাদের সমাধান ছবি তাকান

এখানে চিত্র বর্ণনা লিখুন

আপনি সাহায্য আশা করি


5

আমি ভিজ্যুয়াল স্টুডিও 2010, ভিবি নেট (এএসপি.এনইটি) 4.0 এ সমাধান করতে সক্ষম হয়েছি।

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

কেবলমাত্র আমি অনুপস্থিত ছিল "অ্যাপ_কোড"। সংযোগ স্ট্রিং মধ্যে।

entityBuilder.Metadata = "res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl"

দুর্ভাগ্যক্রমে, উইজার্ডে সংযুক্ত স্ট্রিংটি অ্যাপকনফাইগের জন্য সঠিক নয়। @ লেইকিড মডেলের পাথ ঠিক করার জন্য ভাল উপায়ের পরামর্শ দিয়েছেন।
ডের_মিস্টার

5

ঘন্টাখানেক গুগল করার পরে এবং সমাধানের কোনওটির সমাধানের চেষ্টা করার পরে কাজ করা হয়নি। আমি এখানে বেশ কয়েকটি সমাধান তালিকাভুক্ত করেছি। আমার জন্য যে কাজ করেছে আমি তাও নোট করেছি। (আমি EF সংস্করণ 6.1.1 এবং এসকিউএল সার্ভার 2014 ব্যবহার করছিলাম - তবে একটি পুরানো ডিবি)

  1. প্রকল্পটি পুনর্নির্মাণ এবং আবার চেষ্টা করুন।
  2. ভিএস বন্ধ এবং খুলুন - আমি জানি না এটি কীভাবে কাজ করে
  3. আপনি .EDMX ফাইলটি কোনও ডিরেক্টরিতে রেখেছেন কিনা তা নিশ্চিত করুন, আপনি নিজের সংযোগ স্ট্রিংয়ে ডিরেক্টরিগুলি অন্তর্ভুক্ত করেছেন তা নিশ্চিত করুন। উদাহরণস্বরূপ আমার ডাল ফোল্ডারের ভিতরে রয়েছে। এটি দেখতে এরকম দেখাচ্ছে: connectionString="metadata=res://*/DAL.nameModel.csdl|res://*/DAL.nameModel.ssdl|res://*/DAL.nameModel.msl;(এগুলি ফাইল see এগুলি দেখতে আপনি টগল করতে পারেন সমাধান এক্সপ্লোরারে সমস্ত ফাইল Files / আপত্তি / .. ডিরেক্টরিতে দেখান)

... এবং আরও অনেক যা আমি চেষ্টা করেছি [যেমন: সত্তা ফ্রেমওয়ার্ক সংস্করণটিকে পরবর্তী সংস্করণে ফিরিয়ে দেওয়া (এটি সম্পর্কে নিশ্চিত নয়)]


আমার জন্য কি কাজ করেছে:

এখানে এই নিবন্ধ থেকে , এটি আমার সমস্যা সমাধানে সহায়তা করেছে। আমি শুধু আমার পরিবর্তিত ProviderManifestToken="2012"করতে ProviderManifestToken="2008"EDMX ফাইলে। এটা করতে:

সলিউশন এক্সপ্লোরার

  1. .Edmx ফাইলের ওপরে রাইট ক্লিক করুন
  2. সঙ্গে খোলা..
  3. সম্পাদক এক্সএমএল
  4. প্রোভাইডার ম্যানিফেস্ট টোকেন = ২০০৮ এর সাথে "XXXX" পরিবর্তন করুন

আমি আশা করি এটি সাহায্য করবে.


আপাতদৃষ্টিতে কোনও পরিবর্তন করার পরে আমি সম্প্রতি এই সমস্যাটি করেছি। ভিএস পুনরায় চালু করার চেষ্টা করে কোনও লাভ হয়নি তবে এটি পরিষ্কার করে পুনর্নির্মাণের মাধ্যমে ঠিক করা হয়েছিল। সুতরাং, অন্যদের কাছে, যদি আপনি কোনও পরিবর্তন না করেন এবং এর মধ্যে অন্য কোনওটিই প্রাসঙ্গিক বলে মনে হয় না, তবে একটি পরিষ্কার / পুনর্নির্মাণ চেষ্টা করুন।
গ্রেগ

5

আপনি যদি অন্য কোনও প্রকল্প থেকে edmx ব্যবহার করে থাকেন তবে সংযোগের স্ট্রিংয়ে পরিবর্তন করুন ...

metadata=res://*/Data.DataModel.csdl

...প্রতি...

metadata=res://*/DataModel.csdl

এটি সত্য, আপনি যদি এটি আপনার নতুন প্রকল্পের সাব ফোল্ডারে নিয়ে যেতে চান তবে আপনাকে এটির folder.subfolderআগে এটি যুক্ত করতে হবে।
কাকমাক

ধন্যবাদ, এই সমাধানটি আমার পক্ষে কাজ করেছে। আমি আমার .edmx ফাইলটি একটি প্রকল্পের একটি ডির থেকে অন্য প্রকল্পের মূলটিতে স্থানান্তরিত করেছিলাম এবং আমার সমাধানের সমস্ত সংযোগের স্ট্রিং থেকে দির নামটি সরিয়ে ফেলতে হবে।
ক্রিস

4

চূড়ান্ত সমাধান (এমনকি অন্য দুটি মেশিনে ডাটাবেস পুনরায় তৈরি করার পরে, পাশাপাশি ইডিএমএক্স এবং অন্যান্য সানড্রি) হ'ল সত্তা ফ্রেমওয়ার্কের প্রথম সংস্করণটি ব্যবহার না করা। নেট নেট in.০ এ আবার এটি মূল্যায়নের অপেক্ষায় রয়েছি।

আবার একই সমস্যায় পড়ার পরে এবং উত্তরটির সন্ধানের জন্য, শেষ পর্যন্ত আমি এমন একজনকে পেয়েছি যার একই সমস্যা ছিল। এটি প্রদর্শিত হয় যে সংযোগ স্ট্রিংটি ভিজ্যুয়াল স্টুডিওর উইজার্ড দ্বারা সঠিকভাবে তৈরি করা হয়নি এবং মেটাডেটা সংস্থানগুলির লিঙ্কটি একটি গুরুত্বপূর্ণ পাথ অনুপস্থিত।

v1.0 BUG ?: নির্দিষ্ট মেটাডেটা সংস্থান লোড করতে অক্ষম Un স্ক্রিপ্ট! = মডেল

আপডেট 2013-01-16 : প্রায় একচেটিয়াভাবে EF কোড ফার্স্ট অনুশীলন (এমনকি বিদ্যমান ডাটাবেস সহ) ব্যবহার করে এই সমস্যাটি আর সমস্যা নয়। আমার জন্য, এটি স্বয়ংক্রিয়ভাবে উত্পন্ন কোড এবং কনফিগারেশন থেকে বিশৃঙ্খলা হ্রাস এবং পণ্যটির উপরে আমার নিজের নিয়ন্ত্রণ বাড়ানোর একটি কার্যকর সমাধান ছিল।


4

আমার সমস্যা এবং সমাধান, লক্ষণগুলি একই ছিল "নির্দিষ্ট মেটাডাটা রিসোর্স লোড করতে অক্ষম" তবে মূল কারণটি আলাদা ছিল। সমাধানে আমার 2 টি প্রকল্প ছিল একটি হ'ল এনটিটিমোডেল এবং অন্যটি সমাধান। আমি বাস্তবে ইডিটিএমএক্স ফাইলটি মুছে ফেলা এবং পুনরায় তৈরি করেছি ity

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

     <add name="MyEntities"
     connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;
                    provider=System.Data.SqlClient;
                    provider connection string=&quot;
                    data source=Q\DEV15;initial catalog=whatever;
                    user id=myuserid;password=mypassword;
                    multipleactiveresultsets=True;
                    application name=EntityFramework&quot;"
     providerName="System.Data.EntityClient" />

4

কখনও কখনও আমি আমার প্রকল্পে এই ত্রুটি দেখতে পাচ্ছি। আমি এটি দ্বারা সমাধান

1 - EDMX ফাইলে রাইট ক্লিক করুন

2 - Run Custom Toolবিকল্প নির্বাচন করুন

3 - প্রকল্প পুনর্নির্মাণ


এটি আমার পক্ষে কাজ করেছিল তবে পরে আমাকে পুনর্নির্মাণও করতে হয়েছিল
rdans

3

আমার ক্ষেত্রে, এই সমস্যাটি আমার মডেলের এডিএমএক্স ফাইলটির নাম পরিবর্তন করার সাথে সম্পর্কিত ছিল ... সিএসডিএল / এসএসডিএল / এমএসএল ফাইলগুলির জন্য অ্যাপ.config সংযোগ স্ট্রিংটি সংশোধন করা আমার সমস্যাটি স্থির করেছে।

আপনি যদি আপনার সিএসডিএল / এসএসডিএল / এমএসএল উত্পন্ন করতে EF 4.0 ডিজাইনার ব্যবহার করেন তবে এই 3 "ফাইলগুলি" আসলে মডেলের মূল এডএমএক্স ফাইলের মধ্যে সংরক্ষণ করা হবে। এই ক্ষেত্রে, ওয়াকাসের পোস্টটি বেশ চিহ্নের দিকে রয়েছে। এটি বোঝা গুরুত্বপূর্ণ যে তার উদাহরণে "মডেল_নাম" আপনার মডেলের .edmx ফাইলের (.edmx ছাড়াই) বর্তমান নাম যাই হোক না কেন পরিবর্তন করতে হবে।

এছাড়াও, যদি আপনার এডএমএক্স ফাইলটি আপনার প্রকল্পের মূল স্তরে না থাকে, তবে আপনাকে মডেল_নামকে আপেক্ষিক পথের সাথে প্রিফেস করতে হবে, উদাহরণস্বরূপ

res://*/MyModel.WidgetModel.csdl|res://*/MyModel.WidgetModel.ssdl|res://*/MyModel.WidgetModel.msl

সিএসডিএল / এসএসডিএল / এমএসএল এক্সএমএলটি 'উইজেটমোডেল.এডএমএক্স' মডেল ফাইলে সংরক্ষিত রয়েছে যা 'মাইমোডেল' নামে একটি ফোল্ডারে সঞ্চিত রয়েছে specify


3

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

এটি নিখুঁত নয় কারণ এটি অবজেক্টটি তৈরি করতে প্রতিবিম্ব ব্যবহার করে তবে এটি করার সবচেয়ে সাধারণ উপায় এটি আমি খুঁজে পেতে পারি।

আশা করি এটি কাউকে সাহায্য করবে।

public static class EntityHelper<T> where T : ObjectContext
{
    public static T CreateInstance()
    {
        // get the connection string from config file
        string connectionString = ConfigurationManager.ConnectionStrings[typeof(T).Name].ConnectionString;

        // parse the connection string
        var csBuilder = new EntityConnectionStringBuilder(connectionString);

        // replace * by the full name of the containing assembly
        csBuilder.Metadata = csBuilder.Metadata.Replace(
            "res://*/",
            string.Format("res://{0}/", typeof(T).Assembly.FullName));

        // return the object
        return Activator.CreateInstance(typeof(T), csBuilder.ToString()) as T;
    }
}

3

আপনাদের সবার জন্য SelftrackingEntities ব্যবহারকারীর জন্য, আপনি যদি মাইক্রোসফ্ট ওয়াক-থ্রো অনুসরণ করেন এবং অবজেক্ট কনটেক্সট ক্লাসকে ডাব্লুসিএফ পরিষেবা প্রকল্পে (প্রসঙ্গের সাথে সংযুক্ত করে) আলাদা করে রেখেছেন তবে এই উত্তরটি আপনার জন্য:

এই পোস্টে প্রদর্শিত উত্তরগুলির অংশ যা এতে কোড যুক্ত করে:

... = string.Format("res://{0}/YourEdmxFileName.csdl|res://{0}/YourEdmxFileName.ssdl|res://{0}/YourEdmxFileName.msl", 
        typeof(YourObjectContextType).Assembly.FullName); 

আপনার জন্য কাজ করবে না !! কারণটি হ'ল YourObjectContextType.Assemblyএখন ভিন্ন এসেম্বলিতে (ডাব্লুসিএফ প্রকল্পের সমাবেশের ভিতরে),

সুতরাং আপনার YourObjectContextType.Assembly.FullName সাথে প্রতিস্থাপন করা উচিত ->

ClassTypeThatResidesInEdmProject.Assembly.FullName 

আনন্দ কর.


2

এই একই ত্রুটি বার্তায় আমার সমস্যা ছিল। আমার সমস্যাটি ভিজ্যুয়াল স্টুডিও ২০১০ বন্ধ করে এবং পুনরায় খোলার মাধ্যমে সমাধান করা হয়েছিল।


2

একই সমস্যা ছিল কারণ আমি একটি সমাবেশের নামকরণ করেছি।

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

তারপর এটি ঠিক কাজ করে।


2

একই সমস্যা হওয়ার সাথে সাথে আমি ডেটাবেস থেকে এডিএমএক্স পুনরায় তৈরি করেছি। আমার সমস্যা সমাধান করে


2
দুর্ভাগ্যক্রমে যে লক্ষণটি সম্বোধন করে এবং আচরণ করে, কারণ নয়।
ক্লারিস বাউভার

2

ব্যতিক্রম নয় কারণ অ বিদ্যমান মেটাডেটা থেকে কম্পাইলার ইশারা তাই ঠিক কপি app.config করার connectionstring Web.configConnectionString


1

রিকের মতো আমারও একই সমস্যা এবং সমাধান ছিল, আমি ব্যতীত একটি বিদ্যমান .edmx একটি নতুন প্রকল্পে আমদানি করছিলাম, এবং বেস নেমস্পেসে এটি কোনও ভিন্ন সাব-ডিরেক্টরিতে আমদানি করা হয়েছিল, তাই আমিও সংযোগ আপডেট করতে হয়েছিল বিভিন্ন সাব ডাইরেক্টরি নামকরণ অন্তর্ভুক্ত করতে তিনটি জায়গায় Web.Config এর ভিতরে স্ট্রিং:


1

সলিউশন ফোল্ডারে প্রকল্পগুলি অন্তর্ভুক্ত থাকা সলিউশনটিতে আমার একই সমস্যা ছিল, যখন সেগুলি সলিউশন রুটে স্থানান্তরিত করা হয়েছিল (প্রকল্পের জায়গাগুলির কারণে এমভিসি 3 অ্যাপকনভার্টারের সাথে সন্দেহযুক্ত বাগটি কাটিয়ে উঠতে)।

যদিও সমস্ত * প্রকল্পের রেফারেন্সগুলি প্রয়োজনীয়তার সাথে পুনরায় যুক্ত করার পরে সমাধান সংকলন করা হয়েছিল, তবুও ওয়েবসাইটটি বরখাস্ত করার সময় ত্রুটিটি ছুঁড়ে দেওয়া হয়েছিল।

ইডিএমএক্স একটি প্রকল্পে রয়েছে যা সরানো হয়েছিল ('ডেটা' প্রকল্প), তবে অবশ্যই ডেটা প্রকল্পের কোনও উল্লেখের অভাবে একটি সংকলন ত্রুটি ঘটেনি, কেবল একটি রান-টাইম ত্রুটি।

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

আমি আশা করি এটি অন্য কাউকে সহায়তা করে।


1

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

এই দুটি পৃথক সংযোগের স্ট্রিংগুলি একই হওয়ার পরিবর্তনের আগেও আমি নীচের ত্রুটিটি পেয়েছি।

Unable to load the specified metadata resource

সুতরাং আমি সেই দুটি স্তর (ডাল, ইউআই) এর জন্য একই সংযোগের স্ট্রিং হতে পারি, এটি নিখুঁত কাজ করে।

আমার সমাধানটি হ'ল যে সমস্ত সংযোগের স্ট্রিং তারা ইতিমধ্যে যেভাবেই উপস্থাপন করেছে তা এক হয়ে যায়


1

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

আমি এই পোস্টটি পড়ার এবং বোঝার আগে যা বুঝতে পারছিলাম না, সে কারণেই এটিবি ফ্রেমওয়ার্কটি ডিবিকে ডাকার কারণে এই ত্রুটিটি ছুঁড়ে মারছিল। আমি এসকিউএল প্রোফাইলারের শত শত লাইন দেখছিলাম যা ডাটাবেস মডেলটির সাথে কী ভুল ছিল তা চেষ্টা করার চেষ্টা করছিলাম। আমি যে কলটি প্রত্যাশা করছিলাম তার মতো কিছুই আমি খুঁজে পেলাম না এবং সত্যি বলতে কী আমি যা খুঁজছিলাম তা নিশ্চিত ছিলাম না।

আপনি যদি এই অবস্থানে থাকেন তবে সংযোগের স্ট্রিংটি পরীক্ষা করুন। আমার ধারণা হ'ল ইন্টিফ্রেমওয়ার্কটি তার এসকিউএল তৈরি করার আগে এটি সংযোগের স্ট্রিংয়ের মেটাডেটা অংশে উল্লিখিত মডেলটি পরীক্ষা করবে। আমার ক্ষেত্রে এটি ভুল ছিল। সত্তা ফ্রেমওয়ার্ক এমনকি ডিবি পর্যন্ত এটি তৈরি করে নি।

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


1

একটি দুর্বল app.config বা web.config ফাইল এটি করতে পারে .. আমি আমার UI- তে আমার অ্যাপ্লিকেশন কনফিগের স্ট্রিংটি আমার ওয়েবকনফাইগে অনুলিপি করে প্রবেশ করে শেষ করেছি:

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