এনএইচবারনেট.ম্যাপিংএক্সেপশন: এর জন্য আর জেদ নেই: এক্সওয়াইজেড


134

এখন, আগে আপনি এটা বলে, আমি করেনি গুগল এবং আমার hbm.xmlফাইল হয় একটি এমবেডেড সম্পদ।

আমি যে কোডটি কল করছি তা এখানে:

ISession session = GetCurrentSession();
var returnObject =  session.Get<T>(Id);

ক্লাসের জন্য আমার ম্যাপিং ফাইলটি এখানে:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="HQData.Objects.SubCategory, HQData" table="SubCategory" lazy="true">
    <id name="ID" column="ID" unsaved-value="0">
      <generator class="identity" />
    </id>

    <property name="Name" column="Name" />
    <property name="NumberOfBuckets" column="NumberOfBuckets"  />
    <property name="SearchCriteriaOne" column="SearchCriteriaOne" />

    <bag name="_Businesses" cascade="all">
      <key column="SubCategoryId"/>
      <one-to-many 
         class="HQData.Objects.Business, HQData"/>
    </bag>

    <bag name="_Buckets" cascade="all">
      <key column="SubCategoryId"/>
      <one-to-many
         class="HQData.Objects.Bucket, HQData"/>
    </bag>

  </class>
</hibernate-mapping>

এর আগে কি কেউ এই ইস্যুতে দৌড়েছে?

এখানে সম্পূর্ণ ত্রুটি বার্তাটি রয়েছে:

ম্যাপিংএক্সেপশন: এর জন্য আর স্থির থাকবেন না: এইচকিউডাটা.অবজেক্টস.সুব ক্যাটাগরি] এনহাইবারনেট.আইপল.সেশনফ্যাক্ট্রিআইম্প্লি.গেট এন্টিটিপ্রেসিস্টার (স্ট্রিং সত্তা নাম, বুলিয়ান থ্রো আইফনোটফাউন্ড)
 সি: \ সিএসএআরপি \ এনএইচ ২.০.০ \ নাইবারনেট \ এসসিআর \ এনহাইবারনেট \ ইমপ্ল \ সেশনফ্যাক্ট্রিআইম্প্লি.সি.এস: 6 766 এনহাইবারনেট.আইম্প্লি.সেশনফ্যাক্ট্রিআইপল.গেট এন্টিটিপ্রেসিটার (স্ট্রিং সত্তা নাম)
 সি: \ সিএসএআরপি \ এনএইচ ২.০.০ \ নাইবারনেট \ এসসিআর \ এনহাইবারনেট \ ইমপ্ল \ সেশনফ্যাক্ট্রিআইম্প্লি.সি.এস: 2৫২ এনহাইবারনেট.এভেন্ট.ড্যাফল্ট.ডাফল্টলুড এভেন্টলিস্টনার.অনলোড (লোডইন্ট ইভেন্ট), লোডটাইপ টাইপ
 সি: \ সিএসএআরপি \ এনএইচ 2.0.0 hi নাইবারনেট \ এসসিআর \ এনহাইবারনেট \ ইভেন্ট \ ডিফল্ট \ DefaultLoadEventListener.cs: 37 NHibernate.Impl.SessionImpl.FireLoad (LoadEvent ইভেন্ট, লোডটাইপ লোডটাইপ)
 সি: \ সিএসএআরপি \ এনএইচ ২.০.০ \ নাইবারনেট \ এসসিআর \ এনহাইবারনেট \ ইমপিএল ession সেশনআইপল.সিএস: ২০৫৪ এনএইচবারনেট.আইপল.সেশনআইম্পল.গেট (স্ট্রিং সত্তা নাম, অবজেক্ট আইডি)
 সি: \ সিএসএআরপি \ এনএইচ ২.০.০ \ নাইবারনেট \ এসসিআর H এনহাইবারনেট \ ইমপিএল ession সেশনআইপল.সিএস: 1029 এনহাইবারনেট.আইম্প্লি.সেশনআইম্পল.গেট (সত্ত্বা শ্রেণি, বস্তু আইডি টাইপ করুন)
 সি: \ সিএসএআরপি \ এনএইচ ২.০.০ \ নাইবারনেট \ এসসিআর H এনহাইবারনেট \ ইমপিএল \ সেশনআইপল.সিএস: 1020 এনহাইবারনেট.আইম্প্লি.সেশনআইম্পল.গেট (অবজেক্ট আইডি)
 সি: \ সিএসএআরপি \ এনএইচ ২.০.০ \ নাইবারনেট \ এসসিআর \ এনহাইবারনেট \ ইমপিএল \ সেশনআইপ্লি.সি.এস: 985 এইচকিউডাটা.ডাটাএ্যাকসেসটিলস.এনহাইবারনেটঅবজেক্টহেল্পার.লুডডেটাঅবজেক্ট (ইন্ট 32 আইডি)
 সি: \ বিকাশ \ এইচকিউচ্যানেলআরপো \ এইচকিউ চ্যানেল অ্যাপ্লিকেশন \ এইচকিউচ্যানেল \ এইচকিউডাটা \ ডেটাএ্যাকসেসটিলস \ এনহাইবারনেটঅবজেক্টহেল্পার সিটিস: 42 এইচকিউ ওয়েবেসাইট.লোকাল সার্চ.জেট_সুব ক্যাটাগরী ()
 সি তে: \ বিকাশ Q এইচকিউচ্যানেলরেপো \ এইচকিউ চ্যানেল অ্যাপ্লিকেশন \ এইচকিউচ্যানেল \ এইচকিউ ওয়েবেসাইট \ লোকালসন্ধান.এএসপিএক্স.সিএস: ১ H এইচকিউ ওয়েবেসাইট.লোকাল সার্চ.পেজ_লয়েড (অবজেক্ট প্রেরক, ইভেন্টআর্জি ই)
 সি তে: \ বিকাশ \ এইচকিউচ্যানেলআরপো \ এইচকিউ চ্যানেল অ্যাপ্লিকেশন \ এইচকিউচেনেল \ এইচকিউ ওয়েবেসাইট \ লোকালসন্ধান.এএসপিএক্স.সিএস: ২ System সিস্টেম.ওয়েব.ইটি.এল.ক্যালিহেল্পার.এভেন্টআরজিফানশনক্যালার (ইন্টারপ্রেট এফপি, অবজেক্ট টি, অবজেক্ট টি + ইভেন্ট সিস্টেম) .Util.CalliEventHandlerDelegateProxy.Callback (অবজেক্ট প্রেরক, ইভেন্টআর্গস ই) +৩৩ সিস্টেম. ওয়েবে.ইউ.আই.আর.কন্ট্রোল.অনলয়েড (ইভেন্টআর্গস ই) +৯৯ সিস্টেম.উইব.ইউ.ইন্ট্রোল.লয়েডরেকারসিভ () +৪৪. সিস্টেম.ওয়েজ.ই.ই. .প্রসেসরউকয়েস্টমেইন (বুলিয়ান অন্তর্ভুক্ত স্টেজবিফোরএফেন্সএকপয়েন্ট, বুলিয়ান অন্তর্ভুক্ত স্টেজএফটারঅ্যাকসিঙ্কপয়েন্ট) +1436

আপডেট , এখানে কি জন্য সমাধান আমার দৃশ্যকল্প ছিল: আমি কিছু কোড পরিবর্তন করেছে এবং আমি রানটাইম সময় কনফিগ ফাইলে পরিষদের যোগ করা হয়নি।


আমি একই ত্রুটি ছিল, কিন্তু একটি ভিন্ন সমস্যা। Session.Load ( "SearchItem", searchItemID) SearchItem একটি ম্যাপিং ত্রুটি, Session.Load <SearchItem> (searchItemID) ফেরৎ যেমন না (এবং যেকোনোভাবে করছেন একটি ফলে ভুলত্রুটির সম্ভাবনা হ্রাস উপায়।
মধ্যে Kendrick

উত্তর:


101

আপনি সেশন কারখানার কনফিগারেশনে ম্যাপিং অ্যাসেম্বলি যোগ করতে ভুলে গেছেন এমন শোনায় ..

আপনি যদি app.config ব্যবহার করছেন ...

.
.
    <property name="show_sql">true</property>
    <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
    <mapping assembly="Project.DomainModel"/>  <!-- Here -->
</session-factory>
.
.

7
ফ্লুয়েন্ট এনএইচবারনেটে এটি কীভাবে করবেন, আমি একটি সর্প্রেট প্রকল্পে একটি প্যাটার্ন বিকাশ করছি, তাই আমার কাছে ব্যবহারকারী সমাবেশে অ্যাক্সেস নেই?
মোস্তফা ম্যাগডি

যদি আপনি ব্যবহারকারীর সমাবেশটি উল্লেখ করতে না পারেন তবে আমি ভাবেন না যে আপনি সাবলীল NHibernate ব্যবহার করতে পারবেন।
অ্যান্ডি এস

91

NHibernate এ নতুন কারও পক্ষে সুস্পষ্ট কিছু, তবে বেশ কার্যকর।

সমস্ত এক্সএমএল ম্যাপিং ফাইলগুলিকে ডিফল্ট সামগ্রীর পরিবর্তে এম্বেডেড সংস্থান হিসাবে বিবেচনা করা উচিত । এই বিকল্পটি ফাইলের বৈশিষ্ট্যগুলিতে বিল্ড অ্যাকশন বৈশিষ্ট্যটি সম্পাদনা করে সেট করা হয়েছে।

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


1
হালেলুয়া, এটি আমার হিসাবে আছে Embedded resourceতবে আমি যখন এটি একটি কম্পিউটার থেকে অন্য কম্পিউটারে অনুলিপি করেছি তখন ফাইলটি এই সম্পত্তিটি হারিয়েছে lost আমি কয়েক মিনিটের জন্য আমার মাথা আঁচড়ালাম।
ড্রাগগোস দুরলুট

1
@ ড্র্যাগসডুরলট প্রজেক্ট ফাইল (.csproj) যা ফাইল ফাইলের নয়, প্রকল্প ফাইলগুলির তথ্য সংরক্ষণ করে।
ওয়াগনার লিওনার্দি

50

আমার সমস্যাটি হ'ল আমি ম্যাপিং এক্সএমএল এর নামে .hbm লাগাতে ভুলে গেছি। আপনি এটি একটি এম্বেডেড রিসোর্স তৈরি করেছেন তা নিশ্চিত করুন!


1
আমারও ভুল ছিল!
গ্রিঙ্গো

এটিও আমার সমস্যা ছিল, যখন করছিলেন তখন কিউর মতো একই ত্রুটিটি পান। এই ধরণের সমস্ত অবজেক্টকে জিজ্ঞাসা করার চেষ্টা করার সময়, কোনও ত্রুটি নেই, কেবল একটি খালি ফলাফল সেট!
ক্রিস্টোফ

আরগ - .hbm ভুলেও গেছে। ধন্যবাদ!
ডাঃ সি। হিলারিয়াস

42

আমি এটি বন্ধ পেয়েছিলাম এখানে :

আমার ক্ষেত্রে ম্যাপিং ক্লাসটি সর্বজনীন ছিল না। পরিবর্তে অন্য কথায়:

public class UserMap : ClassMap<user>  // note the public!

আমার সবেমাত্র ছিল:

class UserMap : ClassMap<user>

ধন্যবাদ, আপনি আমাকে কিছুটা মাথা ব্যথার হাত থেকে বাঁচিয়েছেন। :)
রিটমিস

2
আপনি যদি সাবলীল ব্যবহার করছেন, আমি বলব এটি আরও সাধারণ কারণ হবে। ধন্যবাদ, এটি মিস করা খুব সহজ ছিল।
রিচার্ড নিল ইলাগান

1
ধন্যবাদ! আমি আমার ম্যাপিং ক্লাসগুলি সর্বজনীন করেছিলাম কিনা তা খতিয়ে দেখতে গিয়ে আমি আবিষ্কার করেছি যে আমি এই সত্তার জন্য কোনও ম্যাপিং ক্লাস লিখিনি - উফ !! :) আমাকে অনেক সময় সাশ্রয় করেছে !!
জেন

28

গুগলিং এবং স্ট্যাকওভারফ্লোভিংয়ে প্রায় 4 ঘন্টা ব্যয় করা, প্রায় সমস্ত জিনিস চেষ্টা করে দেখতে পেয়েছি আমার ত্রুটিটি পাওয়া গেছে:

আমার ম্যাপিং ফাইল বলা হয় .nbm.xml পরিবর্তে .hbm.xml । সেটা ছিল উন্মাদ।


9
আরেগ, আমার কাছে .hbm.xML এর পরিবর্তে .xML হিসাবে থাকা ব্যতীত কেবল একই কাজ করেছে। ত্রুটিগুলির মধ্যে কিছু ইঙ্গিত থাকতে পারে :)
রেজালার

2
ঈশ্বর. আমি বিশ্বাস করি না যে আমি এটি করেছি। আমি ত্রুটিগুলির জন্য ফাইলগুলি ম্যাপিংয়ের জন্য কয়েক ঘন্টা অনুসন্ধান করছিলাম এবং এটি সক্রিয় হয়ে গেছে যে আমি ফাইলনামে দোহো লিখেছি h ধন্যবাদ! আমি ভাবতে কাঁপতে থাকি যে আমি যদি এতক্ষণে হোঁচট না পড়ে তবে আমার চুল ছিঁড়ে ফেলা হত।
কমুই

1
বাহ, দুর্দান্ত ক্যাচ - আমি এই সমস্যাটি নিয়ে আমার চুলগুলি টানছিলাম। আমার এক্সএমএল ফাইলটি একশবার দেখেছি এবং কেন এটি অন্যদের মতো কাজ করছে না তা বুঝতে পারিনি। আমি আসলে ফাইল নামের ".hbm" অংশটি অনুপস্থিত ছিলাম। ধন্যবাদ!
উইঙ্গার

আপনি আমার ঘন্টা বাঁচিয়েছেন। ধন্যবাদ
মনজয়_ত্যাগবাগ ২

4

আমারও একই সমস্যা ছিল এবং আমি এটি লোকেদের হিসাবে সমাধান করেছি:

আমি এমএস এসকিউএল ২০০৮ এ কাজ করছি, তবে এনএইচ কনফিগারেশনে আমার খারাপ উপভাষা ছিল: এনহাইবারনেট ডায়ালেক্ট। #Sql2005 আমি যদি এটিকে সংশোধন করি তবে ডায়ালেক্ট করুন : এনএইচবারনেট ডায়ালেক্ট। #Sql2008 ডায়াল্ট ব্যতিক্রম ব্যতীত সবকিছু ঠিকঠাক কাজ করে ডায়ালেক্ট করুন


3

আমি আরম্ভের সময় ভুল সমাবেশটিও যুক্ত করেছিলাম। আমি যে ক্লাসটি চালিয়ে যাচ্ছি সেটি # 1 এর সমাবেশে রয়েছে এবং আমার .hbm.xML ফাইলটি সমাবেশ 2 2 এ এমবেড করা আছে। আমি অ্যাসেমব্লি cfg.AddAssembly(...# 2 যুক্ত করতে পরিবর্তন করেছি (সমাবেশ # 1 এর পরিবর্তে) এবং সমস্ত কিছু কাজ করেছে। ধন্যবাদ!


3

আমলের উত্তরে যুক্ত করতে, ইন্টারফেস শ্রেণীর ধরণ নির্দিষ্ট করার জন্য ভুল করবেন না। আপনি বাস্তবায়ন ক্লাস নির্দিষ্ট করেছেন তা নিশ্চিত করুন । (অর্থাত্ IDomainObjectType ব্যবহার করবেন না)। আমি যে এই ভুলটি করেছি তা নয় ... :)


2

এটা করা উচিত name="Id"? টাইপগুলি একটি সম্ভাব্য কারণ।

এরপরে এটি হবে যে আপনি সঠিক টাইপ প্যারামিটারে যাচ্ছেন তা নিশ্চিত করার জন্য একটি জেনেরিক পরীক্ষা দিয়ে এটি ব্যবহার করে।

আপনি কি পুরো ত্রুটি বার্তা পোস্ট করতে পারেন?


2

আমার একই সমস্যা ছিল কারণ আমি কনফিগারেশন.এডডেস্কাবল () পদ্ধতিতে ভুল সমাবেশ যোগ করছিলাম।


2

এই ত্রুটিটি অবৈধ ম্যাপিং কনফিগারেশনের কারণে ঘটে। আপনি কোথায় সেট করেছেন তা পরীক্ষা করা উচিত your আপনার সেশন কারখানার জন্য ম্যাপিং। মূলত আপনার প্রকল্পে ".ম্যাপিংস (") অনুসন্ধান করুন এবং নিশ্চিত করুন যে আপনি নীচের লাইনে সঠিক সত্তা শ্রেণি নির্দিষ্ট করেছেন।

.Mappings(m => m.FluentMappings.AddFromAssemblyOf<YourEntityClassName>())

ধন্যবাদ দোস্ত! আমি প্রজেক্টটি স্যুইচ করেছি আমার সত্তা বসে ছিল!
স্ফূর্তি

1

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

দাবি অস্বীকার: এটি পরামর্শের কিছুটা স্বতন্ত্র বিট হতে পারে যে এটি আমরা আমাদের সংগ্রহস্থল ইন্টিগ্রেশন পরীক্ষা অ্যাসেম্বলিকে কীভাবে গঠন করি তার প্রত্যক্ষ ফলাফল (যেমন আমাদের প্রতিটি পরীক্ষার সমাবেশ থেকে একটিমাত্র হাইবারনেট.এক্সফজি.এক্সএমএল এর প্রতীকী লিঙ্ক রয়েছে)


1

.Config ফাইলে ম্যাপিংয়ের তথ্য নির্দিষ্ট করতে ভুলবেন না

যেমন

যেখানে MyApp.Data হ'ল সমাবেশ যা আপনার ম্যাপিংগুলি অন্তর্ভুক্ত করে


0

আইডি দ্বারা কোনও অবজেক্ট খুঁজতে গিয়ে একইরকম সমস্যা হয়েছিল ... আমি যা করেছি তা ক্লাসের নামটিতে পুরোপুরি যোগ্য নামটি ব্যবহার করা ছিল। এটি ছিল আগে ছিল:

find("Class",id)

আপত্তি তাই এটি এর মত হয়ে গেল:

find("assemblyName.Class",id)

0

নিশ্চিত হয়ে নিন যে আপনি CreateCriteria(typeof(DomainObjectType))যে ডোমেন অবজেক্টটি ডিবি থেকে আনতে চান তার জন্য আপনি সেশনে পদ্ধতিটি কল করেছেন।


এটি একটি জেদ, আনয়ন নয়।
জোশুয়া ড্রেক

0

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

আমার সলিউশন (হ্যাক) হ'ল ওবিজেইকিটিই টাইপ করা প্রচ্ছদের পুনরায় ম্যাপ করা এবং এটি তখন সংরক্ষণ করা। হঠাৎ এটি কাজ করে। তবে কেন জিজ্ঞাসা করবেন না।

            OBJEKTE t = _mapper.Map<OBJEKTE>(inparam);
            OBJEKTE res = await _objRepo.UpdateAsync(t);

যদি ইনপ্যারামটি সোজা আপডেটএন্সিঙ্কে যায় (তবে) এটি কোনও মিলে যাওয়া ধারাবাহিকটি খুঁজে পাবে না।

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

t.GetType()
{Name = "OBJEKTE" FullName = "MyComp.Persistence.OBJEKTE"}

inparam.GetType()
{Name = "OBJEKTEProxyForFieldInterceptor" FullName = "OBJEKTEProxyForFieldInterceptor"}

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

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