সত্তা ফ্রেমওয়ার্ক 4.1 পোকো কোড প্রথমটিতে ভার্চুয়াল কীওয়ার্ডের কী প্রভাব (গুলি) থাকতে পারে?


229

কি virtualযখন মতিন কোড প্রথম এ সম্পত্তি ব্যবহার শব্দ প্রভাব আছে ?. কেউ এর বিভিন্ন প্রকারের বিভিন্ন পরিস্থিতিতে বিভিন্ন বর্ণনা দিতে পারে?

উদাহরণস্বরূপ, আমি জানি এটি অলস লোডিং নিয়ন্ত্রণ করতে পারে - আপনি যদি কোনও আইকোলিকেশন / একাধিক সম্পর্কের সম্পত্তিতে ভার্চুয়াল কীওয়ার্ডটি ব্যবহার করেন তবে এটি ডিফল্টরূপে অলস-লোড হবে, যদি আপনি ভার্চুয়াল কীওয়ার্ডটি ছেড়ে যান তবে এটি কার্যকর হবে উত্সাহিত বোঝা।

virtualPOCO সত্তা সহ EF- তে কীওয়ার্ডের কী কী প্রভাব থাকতে পারে? virtualআমার সমস্ত সম্পত্তি ব্যবহার করার জন্য কি আমি এটি ডিফল্ট করা উচিত , না এটি ব্যবহার না করার জন্য ডিফল্ট করা উচিত?

উত্তর:


194

এখনও পর্যন্ত, আমি এই প্রভাবগুলি সম্পর্কে জানি।

  • অলস লোডিং : virtualআপনি যদি অন্যথায় নির্দিষ্টভাবে চিহ্নিত না করেন তবে কোনও আইকোলেকশন অলস-লোডযুক্ত হবে।
  • আরও দক্ষ পরিবর্তন ট্র্যাকিং । আপনি যদি নিম্নলিখিত সমস্ত প্রয়োজনীয়তা পূরণ করেন তবে আপনার পরিবর্তন ট্র্যাকিং আপনার ভার্চুয়াল বৈশিষ্ট্যগুলি হুক করে আরও কার্যকর পদ্ধতি ব্যবহার করতে পারে। লিঙ্ক থেকে:

    ট্র্যাকিং প্রক্সির পরিবর্তনের জন্য, মৌলিক নিয়মটি হল আপনার ক্লাসটি অবশ্যই সর্বজনীন, অ-বিমূর্ত বা সিল না করে থাকা উচিত। আপনার শ্রেণিকে অবশ্যই স্থির থাকা সমস্ত সম্পত্তিগুলির জন্য সর্বজনীন ভার্চুয়াল গেটার / সেটারগুলি প্রয়োগ করতে হবে। অবশেষে, আপনাকে অবশ্যই সংগ্রহ ভিত্তিক সম্পর্ক নেভিগেশন বৈশিষ্ট্যগুলি ICollection<T>কেবল হিসাবে ঘোষণা করতে হবে । এগুলি কোনও কংক্রিট বাস্তবায়ন বা অন্য কোনও ইন্টারফেস হতে পারে না যা থেকে প্রাপ্ত ICollection<T>(ডিফার্ড লোডিং প্রক্সি থেকে পৃথক)

এটি বর্ণিত আরেকটি দরকারী লিঙ্কটি হল পোকো প্রক্সি তৈরির জন্য এমএসডিএন এর প্রয়োজনীয়তা


52
বৈশিষ্ট্যগুলিকে ভার্চুয়াল করার অন্য কোনও কারণ নেই। নেভিগেশন বৈশিষ্ট্যগুলি অলস লোডিংয়ের জন্য ভার্চুয়াল হিসাবে চিহ্নিত করা হয় এবং স্কেলার বৈশিষ্ট্যগুলি পরিবর্তন ট্র্যাকিংয়ের জন্য ভার্চুয়াল হিসাবে চিহ্নিত করা হয়।
লাডিস্লাভ মৃঙ্কা

10
নেভিগেশন বৈশিষ্ট্যগুলি কী এবং স্কেলারের বৈশিষ্ট্যগুলি কী কী?
আবিদ আলী

9
@ অ্যাবিডলি: আমি বিশ্বাস করি একটি নেভিগেশন সম্পত্তি হ'ল বিদেশী কী (একটি সত্তা শ্রেণীর ধরণ) বা অনেকের সাথে সম্পর্ক (আইকোলিকেশন <> টাইপের)। একটি স্কেলার সম্পত্তি হ'ল বেস টাইপ (ইনট, স্ট্রিং, ..) বা কমপ্লেক্সটাইপ (যা কেবল বেস টাইপের স্ট্রাক্ট)।
স্কট স্টাফোর্ড

2
" public virtual byte[] bigData { get; set; }" অলস লোড হচ্ছে?
এচোলিউ

9
বাইটস [] আগ্রহের সাথে লোড করা হবে, কেবল বিদেশী কীগুলি অলস হতে পারে। আপনি যদি এই কলামটি আনতে না চান তবে কখনই পুরো রেকর্ডটি আনবেন না - ঠিক .Select(a=>new { fields you want })
স্কট স্টাফোর্ড

63

এই ভার্চুয়াল কীওয়ার্ডটি সত্তা কাঠামোর (অলস লোডিং, আগ্রহী লোডিং এবং সুস্পষ্ট লোডিং) ডেটা লোড করার বিষয় সম্পর্কিত to

আপনি যখন অলস লোডিংয়ের সাথে ডেটা লোড করতে চান তখন আপনার ভার্চুয়াল কীওয়ার্ডটি ব্যবহার করা উচিত ।

অলস লোডিং হ'ল প্রক্রিয়া যার মাধ্যমে কোনও সত্তা বা সত্তার সংগ্রহ প্রথমবার অ্যাক্সেস করার পরে ডাটাবেস থেকে স্বয়ংক্রিয়ভাবে লোড হয়।

উদাহরণস্বরূপ, নীচে সংজ্ঞায়িত ব্লগ সত্তা শ্রেণি ব্যবহার করার সময়, সম্পর্কিত পোস্টগুলি প্রথমবার নেভিগেশন নেভিগেশন সম্পত্তি অ্যাক্সেস করার পরে লোড করা হবে:

public class Blog 
{  
     public int BlogId { get; set; }  
     public string Name { get; set; }  
     public string Url { get; set; }  
     public string Tags { get; set; }  
     public virtual ICollection<Post> Posts { get; set; }  
}

পোস্ট সম্পত্তি অলস ভার্চুয়াল করে পোস্ট সংগ্রহের অলস লোডিং বন্ধ করা যেতে পারে।

যদি অলস লোডিং বন্ধ থাকে তবে আগ্রহী লোডিং (অন্তর্ভুক্ত পদ্ধতিটি ব্যবহার করে) বা স্পষ্টভাবে সম্পর্কিত সংস্থাগুলি লোড করে (লোড পদ্ধতিটি ব্যবহার করে) পোস্ট সংগ্রহগুলি লোড করা সম্ভব achieved

আগ্রহী লোড হচ্ছে:

using (var context = new BloggingContext()) 
{ 
    // Load all blogs and related posts 
    var blogs1 = context.Blogs 
                          .Include(b => b.Posts) 
                          .ToList(); 
}

স্পষ্টত লোড হচ্ছে:

using (var context = new BloggingContext()) 
{ 
    var blog = context.Blogs.Find(1); 

    // Load the posts related to a given blog 
    context.Entry(blog).Collection(p => p.Posts).Load(); 
}

1
ভার্চুয়াল (অলস-লোডিং) ব্যবহার করার সময় এন + 1 সমস্যা এড়াতে কীভাবে? উদাহরণস্বরূপ, কনটেক্সট.ব্লগস.টোললিস্ট (); তারপরে এটি টেবিলগুলিতে যোগদান করবে না এবং এটি নির্বাচিত ক্যোয়ারীটি ব্লগের সংখ্যার মতো চালাবে।
বিশেষজ্ঞ চাই

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