সত্তা ফ্রেমওয়ার্ক 5 এ কীভাবে কোনও শিশু অবজেক্টের শিশু অবজেক্ট অন্তর্ভুক্ত করা যায়


138

আমি ব্যবহার করছি Entity Framework 5 code firstএবং ASP.NET MVC 3

একটি শিশু অবজেক্টের চাইল্ড অবজেক্টকে জনবহুল করার জন্য আমি সংগ্রাম করছি। নীচে আমার ক্লাস ..

আবেদনের শ্রেণি;

public class Application
{
     // Partial list of properties

     public virtual ICollection<Child> Children { get; set; }
}

শিশু শ্রেণি:

public class Child
{
     // Partial list of properties

     public int ChildRelationshipTypeId { get; set; }

     public virtual ChildRelationshipType ChildRelationshipType { get; set; }
}

চাইল্ড রিলেশনশিপ টাইপ ক্লাস:

public class ChildRelationshipType
{
     public int Id { get; set; }

     public string Name { get; set; }
}

সমস্ত অ্যাপ্লিকেশন ফিরিয়ে আনার জন্য সংগ্রহশালায় গেটআল পদ্ধতির অংশ:

return DatabaseContext.Applications
     .Include("Children");

চাইল্ড ক্লাসে চাইল্ড রিলেশনশিপ টাইপ ক্লাসের একটি রেফারেন্স রয়েছে। অ্যাপ্লিকেশনটির বাচ্চাদের সাথে কাজ করার জন্য আমার এরকম কিছু হবে:

foreach (Child child in application.Children)
{
     string childName = child.ChildRelationshipType.Name;
}

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

আমি কীভাবে নির্দিষ্ট করব যে প্রতিটি সন্তানের অবজেক্টটিতে অবশ্যই ChildRelationshipTypeআমি ওপরের মতো জিনিসটি অন্তর্ভুক্ত করব?


উত্তর:


256

আপনি যদি গ্রন্থাগারটি অন্তর্ভুক্ত করেন তবে আপনি পদ্ধতির System.Data.Entityএকটি ওভারলোড ব্যবহার করতে পারেন Include()যা স্ট্রিংয়ের পরিবর্তে ল্যাম্বডা এক্সপ্রেশন নেয়। তারপরে আপনি পথের Select()চেয়ে লিনক এক্সপ্রেশন সহ বাচ্চাদের উপর চাপিয়ে দিতে পারেন string

return DatabaseContext.Applications
     .Include(a => a.Children.Select(c => c.ChildRelationshipType));

6
গ্রামীমিলার যেমন বলেছিলেন, দৃ strongly়ভাবে টাইপ করা ক্লাসগুলি স্ট্রিং ব্যবহারের চেয়ে রক্ষণাবেক্ষণের জন্য ভাল
রায়ান অ্যামিজ

লাম্বা পদ্ধতিটি কোন সংস্করণে উপস্থিত হয়েছিল? আমি একটি EF 4.0 কোডবেসে আটকে আছি ... এবং লামদাসকে কাজ করতে পারি না। যে কোনও ইনপুট জন্য ধন্যবাদ।
গ্রানাডা কোডার

5
এটি EF 4 এ কাজ করবে, কেবল একটি রেফারেন্স যুক্ত করতে ভুলবেন নাSystem.Data.Entity;
রায়ান অ্যামিজ

5
এফওয়াইআই - ইএফ 6 এ নাম স্থানটি হলMicrosoft.Data.Entity
ব্র্যাড

ইএফ 5 ব্যবহার করে, আমি পেলাম না e স্টেটপ্রোভনস)। (বি => বি। বিলিংএড্রেস) অন্তর্ভুক্ত করুন I
জিওভানি মার্টিনেজ

91

। নেট কোর মধ্যে ইএফ কোর দিয়ে আপনি কীওয়ার্ডটি ব্যবহার করতে পারেন ThenInclude:

return DatabaseContext.Applications
 .Include(a => a.Children).ThenInclude(c => c.ChildRelationshipType);

বাচ্চাদের সংগ্রহ থেকে শিশুদের অন্তর্ভুক্ত করুন:

return DatabaseContext.Applications
 .Include(a => a.Childrens).ThenInclude(cs => cs.ChildRelationshipType1)
 .Include(a => a.Childrens).ThenInclude(cs => cs.ChildRelationshipType2);

6
ধন্যবাদ !!! সত্যিই সহায়ক! কখনও কখনও আপনি ভুল ইন্টেলিজেন্স পেতে পারেন, কেবল এটি উপেক্ষা করুন এবং তৈরি করুন! :)
মুহিহসান

খুব ভাল, আমি। নেট কোর খুঁজছিলাম :)
অ্যান্ডি ক্লার্ক

1
এবং যদি বাচ্চাদের সংগ্রহ হয় এবং এর অধীনে আমার সম্পত্তিগুলি অন্তর্ভুক্ত করা দরকার?
ডডব্রায়ান

তার জন্য একটি ওভারলোড খুঁজে পেয়েছি। প্রথমে স্পষ্ট ছিল না।
ডডব্রায়ান

1
@ ডডব্রিয়ান @ ওভারলোড কী ছিল? আমি বাসা বাঁধার চেষ্টা করছি henতখন অন্তর্ভুক্ত করুন, যেখানে শিশুটি সংগ্রহ।
গ্রেগ হার্ডিন

22

আমি নিম্নলিখিতগুলি শেষ করে দিয়েছি এবং এটি কাজ করে:

return DatabaseContext.Applications
     .Include("Children.ChildRelationshipType");

76
দৃ strongly়ভাবে টাইপ করা উপায় ভাল। ম্যাজিক স্ট্রিংগুলি রিফ্যাক্টরিংয়ের জন্য ভাল নয়
গ্রিম্মিলার

2

জেনেরিক রিপোজিটরি প্যাটার্নটি ব্যবহার করার এবং এর জন্য জেনেরিক সমাধানটি প্রয়োগ করার একটি ভাল উদাহরণ এ জাতীয় দেখতে পারে।

public IList<TEntity> Get<TParamater>(IList<Expression<Func<TEntity, TParamater>>> includeProperties)

{

    foreach (var include in includeProperties)
     {

        query = query.Include(include);
     }

        return query.ToList();
}

আমি কিভাবে উপরের পদ্ধতিটি কল করব? আপনি কি একটি উদাহরণ দিতে পারেন
জামি

@ জামি-তালিকা <এক্সপ্রেশন <ফানক <পার্সোনওজেক্ট, অবজেক্ট >>> অন্তর্ভুক্ত = নতুন তালিকা <এক্সপ্রেশন <ফানক <পার্সোনওজেক্ট, অবজেক্ট >>> (); অন্তর্ভুক্ত.এড (x => x. প্রথম নাম); পান <PersonObject> (includers);
gcoleman0828

1
এবং কোয়েরি কোথা থেকে আসে ...?
ডগ দাড়ি

দুঃখিত, ডাওগবার্ড, আপনার প্রশ্ন অনুসরণ করে না।
gcoleman0828

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