সত্তা ফ্রেমওয়ার্ক কোর মডেলগুলির সাথে সি # 8.0 নলযোগ্য রেফারেন্স প্রকারগুলি কীভাবে ব্যবহার করবেন?


16

আমি .NET কোর 3.0 প্রকল্পে সি # 8.0 নলযোগ্য রেফারেন্স প্রকারগুলি সক্ষম করছি। প্রকল্পটি ডাটাবেস অ্যাক্সেস করতে সত্তা ফ্রেমওয়ার্ক কোর 3.0 ব্যবহার করে।

নীচে এমন একটি ডেটা মডেল রয়েছে যার শিরোনাম নালার হওয়া উচিত নয়।

public class Vehicle
{
    public int Id { get; private set; } 

    public string Title { get; private set; }

    // Entity Framework Core is instructed to bind to the private _drivers field in a configuration builder
    private readonly List<Driver> _drivers = new List<Driver>();
    public IReadOnlyCollection<Driver> Drivers => _drivers.AsReadOnly();

    private Vehicle() 
    {
    }

    public Vehicle(string title) 
    {
        this.Title = title;
    }

    public void AddDriver(string name)
    {
         this._drivers.Add(new Driver(name));
    }
 }

// A foreign column is defined in a configuration builder
public class Driver
{
    public int Id { get; private set; } 

    public string Name { get; private set; }

    private Driver() 
    {
    }

    public Driver(string name) 
    {
        this.Name = name;
    }
 }

নিজস্ব কোডটি publicকেবল কনস্ট্রাক্টর ব্যবহার করার কথা রয়েছে যখন কনস্ট্রাক্টররা কেবল privateসত্ত্বা ফ্রেমওয়ার্ক কোর এবং (সম্ভাব্য এছাড়াও) সিরিয়ালাইজেশনকে এই শ্রেণি / মডেলগুলিতে ডাটাবেস থেকে মানগুলি বাঁধতে দেয়। পাবলিক কনস্ট্রাক্টরের মডেলটির বৈশিষ্ট্যগুলির তুলনায় বিভিন্ন কাঠামো, তালিকা এবং যুক্তিগুলির ধরণ থাকতে পারে (উদাহরণস্বরূপ, এটিতে প্রথম প্রয়োজনীয় সন্তানের পক্ষে যুক্তি থাকতে পারে, এতে কিছু যুক্তি optionচ্ছিক থাকতে পারে)।

যাইহোক, সংকলক নির্মাণকারীগুলিতে উত্পন্ন CS8618 Non-nullable field is uninitialized. Consider declaring as nullable.করে private

আমি এর privateদ্বারা নির্মাতাদের জন্য CS8616 অক্ষম করতে সক্ষম হয়েছি #pragma warning disable CS8618তবে আমি এটিকে একটি ভাল ধারণা হিসাবে বিবেচনা করি না।

এই দৃশ্যে সি # 8.0 নলযোগ্য রেফারেন্স প্রকারগুলি কীভাবে ব্যবহার করার কথা? বা আমার মডেলটি বোগাস বা সেরা অনুশীলনের লঙ্ঘন করছে - কীভাবে এটি সঠিকভাবে করবেন?

দুর্ভাগ্যক্রমে, আমি কোনও প্রাসঙ্গিক ডক্স বা গাইডেন্স পাইনি।


উত্তর:


6

অ-নলাবদ্ধ নেভিগেশনাল সম্পত্তি হ্যান্ডেল করার কোনও সঠিক উপায় নেই।

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

অফিসিয়াল ডকুমেন্টেশন লিঙ্ক: https://docs.microsoft.com/en-us/ef/core/miscellaneous/nullable-references-tyype#non-nullable-properties- and-initialization


2

কনস্ট্রাক্টর সহ সত্ত্বার ধরণের জন্য এমএস ডক্স থেকে

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

সম্ভবত এই বৈশিষ্ট্যগুলির জন্য প্রয়োজনীয় প্যারামিটারের সাথে একটি প্রাইভেট সিটার তৈরি করা মূল্যবান এবং দেখুন যে ফ্রেমওয়ার্ক তখন কল করবে এবং কাজ করবে?

সতর্কতা নিষ্ক্রিয় করা ভাল ধারণা নয় যতক্ষণ না আপনি পুরোপুরি 100% আত্মবিশ্বাসী হন যে এটি অক্ষম করা ঠিক আছে ok

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