আমি কীভাবে শিশুদের অবজেক্টগুলি সংরক্ষণ / প্রবেশ করানোর চেষ্টা থেকে সত্তা ফ্রেমওয়ার্কটি বন্ধ করব?


105

যখন আমি সত্তা কাঠামো সহ কোনও সত্তা সংরক্ষণ করি, তখন আমি স্বাভাবিকভাবেই ধরে নিয়েছিলাম যে এটি কেবল নির্দিষ্ট সত্তাটি সংরক্ষণ করার চেষ্টা করবে। তবে এটি সত্তার শিশু সত্তাগুলি সংরক্ষণ করার চেষ্টা করছে save এটি সমস্ত ধরণের সততা সমস্যার সৃষ্টি করছে। আমি কীভাবে EF- কে কেবলমাত্র সেই সত্তাটি সংরক্ষণ করতে বাধ্য করব যেগুলি সংরক্ষণ করতে চাই এবং তাই সমস্ত শিশু অবজেক্টকে উপেক্ষা করতে পারি?

আমি যদি সম্পত্তিগুলিকে ম্যানুয়ালি সেট করে রাখি তবে আমি একটি ত্রুটি পেয়েছি "অপারেশন ব্যর্থ হয়েছে: সম্পর্কটি পরিবর্তন করা যায়নি কারণ এক বা একাধিক বিদেশী-মূল বৈশিষ্ট্য অযোগ্য" " এটি অত্যন্ত পাল্টা-উত্পাদনশীল যেহেতু আমি সন্তানের অবজেক্টটি বিশেষত নালায় সেট করেছি যাতে ইএফ এটিকে একা রেখে দেয়।

আমি কেন বাচ্চাদের জিনিসগুলি সংরক্ষণ / সন্নিবেশ করতে চাই না?

যেহেতু মন্তব্যে এটি পিছনে পিছনে আলোচনা করা হচ্ছে, আমি কেন আমার সন্তানের জিনিসগুলি একা রেখে যেতে চাই তার কিছুটা ন্যায়সঙ্গততা দেব।

আমি যে অ্যাপ্লিকেশনটি তৈরি করছি তাতে, EF অবজেক্টের মডেলটি ডাটাবেস থেকে লোড হচ্ছে না তবে এমন ডেটা অবজেক্ট হিসাবে ব্যবহৃত হচ্ছে যা আমি একটি ফ্ল্যাট ফাইল পার্স করার সময় পপুলেট করছি। শিশু অবজেক্টের ক্ষেত্রে, এর মধ্যে অনেকগুলি পিতামাতার সারণীর বিভিন্ন বৈশিষ্ট্য সংজ্ঞায়িত সারণীগুলিকে বোঝায়। উদাহরণস্বরূপ, প্রাথমিক সত্তার ভৌগলিক অবস্থান।

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

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


আমি যতদূর জানি আপনার সন্তানের জিনিসগুলি বাতিল করতে হবে।
জোহান

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

ইউফোরিক, এটি সম্পূর্ণ অপ্রয়োজনীয়।
মার্ক মিক্লেলেফ

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

আমাকে সত্যই যে বিরক্ত করে তা হ'ল আমি যদি এই জিনিসগুলিকে প্রকৃতপক্ষে বাতিল করার জন্য চলে যাই তবে এটি অনুধাবন করার পরিবর্তে অভিযোগ করে যে আমি এটি কেবল তাদের ছেড়ে চলে যেতে চাই। যেহেতু এই শিশু অবজেক্টগুলি সমস্ত alচ্ছিক (ডাটাবেসের মধ্যে nullaable) তাই EF কে ভুলে যেতে বাধ্য করার কোনও উপায় আছে যে আমার কাছে সেগুলি ছিল? অর্থ্যাৎ এর প্রসঙ্গে বা ক্যাশে একরকম?
মার্ক মিক্লেফ

উত্তর:


57

যতদূর আমি জানি, আপনার কাছে দুটি বিকল্প রয়েছে।

বিকল্প 1)

সমস্ত শিশু অবজেক্ট নাল, এটি EF- কে কিছু যুক্ত না করার বিষয়টি নিশ্চিত করবে। এটি আপনার ডাটাবেস থেকে কিছু মুছবে না।

বিকল্প 2)

নিম্নলিখিত কোডগুলি ব্যবহার করে প্রসঙ্গ থেকে পৃথক হিসাবে শিশু অবজেক্টগুলি সেট করুন

 context.Entry(yourObject).State = EntityState.Detached

মনে রাখবেন যে আপনি List/ কে আলাদা করতে পারবেন না Collection। আপনাকে নিজের তালিকাটি লুপ করতে হবে এবং আপনার তালিকার প্রতিটি আইটেম আলাদা করতে হবে

foreach (var item in properties)
{
     db.Entry(item).State = EntityState.Detached;
}

হাই জোহান, আমি সংগ্রহগুলির মধ্যে একটিকে আলাদা করার চেষ্টা করেছি এবং এটি নীচের ত্রুটিটি ছুঁড়ে ফেলেছে: সত্তা টাইপ হ্যাশসেট`1 বর্তমান প্রসঙ্গে মডেলটির অংশ নয়।
মার্ক মিক্লেলেফ

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

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

4
আমি কি প্রসঙ্গটি ব্যবহার করতে পারি? (এন্ট্রি (আপনার অবজেক্ট)) এটি যুক্ত করার আগেই স্ট্যাটস?
থমাস ক্লেমার

4
@ মিরিন্ড 4 আমি রাজ্যটি ব্যবহার করিনি। যদি আমি কোনও বস্তু sertোকান তবে আমি নিশ্চিত করি যে সমস্ত শিশু নাল n আপডেটে আমি শিশুটিকে ছাড়াই প্রথমে অবজেক্টটি পাই।
থমাস ক্লেমার

42

দীর্ঘ গল্প সংক্ষিপ্ত: বিদেশী কী ব্যবহার করুন এবং এটি আপনার দিনকে সাশ্রয় করবে।

ধরুন আপনার একটি স্কুল সত্তা এবং একটি নগর সত্তা রয়েছে এবং এটি একটি বহু-এক-সম্পর্ক যা যেখানে কোনও সিটির অনেকগুলি স্কুল রয়েছে এবং একটি স্কুল একটি শহরের অন্তর্গত। এবং ধরে নিন যে শহরগুলি ইতিমধ্যে তাত্ক্ষণিক সারণীতে বিদ্যমান রয়েছে যাতে আপনি চান না যে কোনও নতুন স্কুল tingোকানোর সময় সেগুলি আবার sertedোকানো হবে।

প্রাথমিকভাবে আপনি আপনাকে সত্তার মতো করে সংজ্ঞা দিতে পারেন:

public class City
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class School
{
    public int Id { get; set; }
    public string Name { get; set; }

    [Required]
    public City City { get; set; }
}

এবং আপনি এইভাবে স্কুল সন্নিবেশ করতে পারেন (ধরে নিন যে আপনার কাছে ইতিমধ্যে নতুন আইটেমের জন্য নগর সম্পত্তি অর্পণ করা আছে ):

public School Insert(School newItem)
{
    using (var context = new DatabaseContext())
    {
        context.Set<School>().Add(newItem);
        // use the following statement so that City won't be inserted
        context.Entry(newItem.City).State = EntityState.Unchanged;
        context.SaveChanges();
        return newItem;
    }
}

উপরোক্ত পদ্ধতির ক্ষেত্রে এক্ষেত্রে নিখুঁতভাবে কাজ করতে পারে, তবে আমি বিদেশী কী পদ্ধতির পছন্দ করি না যা আমার কাছে আরও স্পষ্ট এবং নমনীয়। নীচে আপডেট সমাধান দেখুন:

public class City
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class School
{
    public int Id { get; set; }
    public string Name { get; set; }

    [ForeignKey("City_Id")]
    public City City { get; set; }

    [Required]
    public int City_Id { get; set; }
}

এইভাবে, আপনি স্পষ্টভাবে সংজ্ঞায়িত করেছেন যে বিদ্যালয়ের একটি বিদেশী কী সিটি_আইডি রয়েছে এবং এটি সিটি সত্তাকে বোঝায় । সুতরাং যখন বিদ্যালয়ের সন্নিবেশের বিষয়টি আসে , আপনি এটি করতে পারেন:

    public School Insert(School newItem, int cityId)
    {
        if(cityId <= 0)
        {
            throw new Exception("City ID no provided");
        }

        newItem.City = null;
        newItem.City_Id = cityId;

        using (var context = new DatabaseContext())
        {
            context.Set<School>().Add(newItem);
            context.SaveChanges();
            return newItem;
        }
    }

এই ক্ষেত্রে, আপনি স্পষ্টভাবে উল্লেখ City_Id নতুন রেকর্ড এবং অপসারণ সিটি গ্রাফ থেকে যাতে মতিন সহ প্রসঙ্গ এটি যোগ করতে বিরক্ত করবে না স্কুল

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

আশা করি এটি আপনার পক্ষে সহায়ক।


দুর্দান্ত উত্তর, আমাকে অনেক সাহায্য করেছে! তবে সিটি_আইডির জন্য অ্যাট্রিবিউটটি ব্যবহার করে সর্বনিম্ন 1 টির মান বলা ভাল কি হবে না [Range(1, int.MaxValue)]?
ড্যান রেইসন

স্বপ্নের মত!! অসংখ্য ধন্যবাদ!
সিজেএইচ

এটি কলারের মধ্যে স্কুল অবজেক্ট থেকে মানটি সরিয়ে ফেলবে। SaveChanges নাল নেভিগেশন বৈশিষ্ট্যের মান পুনরায় লোড করে? অন্যথায় যদি ফোনটির তথ্যের প্রয়োজন হয় তবে সন্নিবেশ () পদ্ধতিটি কল করার পরে সিটি অবজেক্টটি পুনরায় লোড করা উচিত। এটি আমি প্রায়শই ব্যবহার করেছি এমন প্যাটার্নটি, তবে কারও কাছে যদি খুব ভাল থাকে তবে আমি আরও ভাল নিদর্শনগুলির জন্য উন্মুক্ত।
19:32

4
এটি আমার পক্ষে সত্যই সহায়ক ছিল। অ্যান্টিস্টেট.অনচাগড হ'ল ঠিক এমনটিই আমার প্রয়োজন এমন একটি অবজেক্টকে অর্পণ করার জন্য যা একটি বৃহত অবজেক্ট গ্রাফের মধ্যে অনুসন্ধানের টেবিল বিদেশী কী উপস্থাপন করে যা আমি একক লেনদেন হিসাবে সংরক্ষণ করছিলাম। EF কোর স্বজ্ঞাত ত্রুটি বার্তা আইএমও এর চেয়ে কম ছুঁড়ে ফেলেছে। আমি আমার অনুসন্ধান সারণীগুলি ক্যাশে করেছি যা কার্য সম্পাদনের কারণে খুব কমই পরিবর্তিত হয়। আপনার ধারণাটি হ'ল, কারণ সন্ধানের টেবিলের অবজেক্টের পিকে ডাটাবেসের মধ্যে যা আছে তা ইতিমধ্যে এটি যে তার অপরিবর্তিত তা জানে এবং বিদ্যমান আইটেমটিতে কেবল এফকে বরাদ্দ দেয়। পরিবর্তে নতুন সারণী অবজেক্টটি লুকানোর চেষ্টা করে।
tnk479

রাজ্যটিকে অপরিবর্তিত রাখার বা সেট করার কোনও সমন্বয় আমার পক্ষে কাজ করছে না। EF জোর দিয়েছিল যে যখন আমি কেবল পিতামাতার মধ্যে একটি স্কেলার ফিল্ড আপডেট করতে চাই তখন এটি একটি নতুন শিশু রেকর্ড সন্নিবেশ করা প্রয়োজন।
BobRz

21

আপনি যদি কেবল পিতামাত্ত বস্তুতে পরিবর্তনগুলি সংরক্ষণ করতে চান এবং তার যে কোনও শিশু অবজেক্টে পরিবর্তনগুলি সংরক্ষণ করা এড়াতে চান , তবে কেন কেবল নিম্নলিখিতগুলি করবেন না:

using (var ctx = new MyContext())
{
    ctx.Parents.Attach(parent);
    ctx.Entry(parent).State = EntityState.Added;  // or EntityState.Modified
    ctx.SaveChanges();
}

প্রথম লাইনটি প্যারেন্ট অবজেক্ট এবং তার নির্ভরশীল শিশু বস্তুর পুরো গ্রাফটিকে Unchangedরাজ্যের প্রসঙ্গে সংযুক্ত করে ।

দ্বিতীয় লাইনটি কেবল তার পিতা-মাতার অবজেক্টের জন্য রাষ্ট্র পরিবর্তন করে, তার শিশুদের Unchangedরাজ্যে রেখে দেয় ।

নোট করুন যে আমি একটি নতুন তৈরি প্রসঙ্গ ব্যবহার করেছি, সুতরাং এটি ডাটাবেসে অন্য কোনও পরিবর্তন সংরক্ষণ করা এড়ায়।


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

এটি আর মূল কাজ করে না। "সংযুক্তি: প্রত্যেকটি पहुंचযোগ্য সত্তাকে সংযুক্ত করে, যেখানে কোনও অ্যাক্সেসযোগ্য সত্তার স্টোর-উত্পন্ন কী থাকে এবং কোনও কী মান নির্ধারিত হয় না; এগুলি যুক্ত হিসাবে চিহ্নিত করা হবে" " বাচ্চারা পাশাপাশি নতুন হলে তাদের যুক্ত করা হবে they
মিমিক্স

14

প্রস্তাবিত সমাধানগুলির মধ্যে একটি হ'ল একই ডাটাবেস প্রসঙ্গ থেকে নেভিগেশন সম্পত্তি বরাদ্দ করা। এই সমাধানে, ডাটাবেস প্রসঙ্গে বাইরে থেকে নির্ধারিত নেভিগেশন সম্পত্তি প্রতিস্থাপন করা হবে। দয়া করে উদাহরণের জন্য নিম্নলিখিত উদাহরণটি দেখুন।

class Company{
    public int Id{get;set;}
    public Virtual Department department{get; set;}
}
class Department{
    public int Id{get; set;}
    public String Name{get; set;}
}

ডাটাবেসে সংরক্ষণ করা:

 Company company = new Company();
 company.department = new Department(){Id = 45}; 
 //an Department object with Id = 45 exists in database.    

 using(CompanyContext db = new CompanyContext()){
      Department department = db.Departments.Find(company.department.Id);
      company.department = department;
      db.Companies.Add(company);
      db.SaveChanges();
  }

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


আমি 100% এর সাথে সম্মত হয়েছি এটি হাস্যকর যে আইডি সরবরাহ করা হলে ইএফ একটি নতুন রেকর্ড তৈরি করার চেষ্টা করে। আসল অবজেক্টের সাথে বাছাই তালিকার বিকল্পগুলি পূরণ করার কোনও উপায় যদি আমরা ব্যবসায় থাকতাম।
T3.0

11

প্রথমে আপনাকে জানতে হবে যে EF- তে সত্তা আপডেট করার জন্য দুটি উপায় রয়েছে।

  • সংযুক্ত বস্তু

আপনি যখন উপরে বর্ণিত একটি পদ্ধতি ব্যবহার করে অবজেক্ট প্রসঙ্গে যুক্ত বস্তুর সম্পর্ক পরিবর্তন করেন, সত্তা ফ্রেমওয়ার্কের জন্য বিদেশী কী, রেফারেন্স এবং সংগ্রহগুলি সিঙ্কে রাখা দরকার।

  • সংযোগযুক্ত বস্তু

আপনি যদি সংযোগ বিচ্ছিন্ন বস্তুর সাথে কাজ করছেন তবে আপনাকে ম্যানুয়ালি সিঙ্ক্রোনাইজেশন পরিচালনা করতে হবে।

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

আপনি সংযোগ বিচ্ছিন্ন বস্তুর সাথে কাজ করেন, এর মানে হল যে, কিন্তু এটা স্পষ্ট আপনি ব্যবহার করছেন কিনা এর স্বাধীন সমিতি বা বিদেশী কী সমিতি

  • অ্যাড

    বিদ্যমান শিশু অবজেক্টের সাথে নতুন সত্তা যুক্ত করার সময় (ডাটাবেসে থাকা অবজেক্ট), চাইল্ড অবজেক্টটি যদি ইএফ দ্বারা ট্র্যাক না করা হয় তবে চাইল্ড অবজেক্টটি আবার প্রবেশ করানো হবে। যদি না আপনি ম্যানুয়ালি প্রথমে সন্তানের অবজেক্টটি সংযুক্ত করেন।

      db.Entity(entity.ChildObject).State = EntityState.Modified;
      db.Entity(entity).State = EntityState.Added;
    
  • হালনাগাদ

    আপনি কেবল সত্তাকে পরিবর্তিত হিসাবে চিহ্নিত করতে পারেন, তারপরে সমস্ত স্কেলারের বৈশিষ্ট্য আপডেট করা হবে এবং নেভিগেশন বৈশিষ্ট্যগুলি কেবল উপেক্ষা করা হবে।

      db.Entity(entity).State = EntityState.Modified;
    

গ্রাফ ডিফ

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

এখানে পরিচয় দেওয়া হচ্ছে, সত্তা ফ্রেমওয়ার্ক কোডের জন্য গ্রাফডিফ প্রথমে উপস্থাপন করা হচ্ছে - বিচ্ছিন্ন সত্তার গ্রাফের স্বয়ংক্রিয় আপডেটগুলি মঞ্জুরি দেওয়া হচ্ছে

কোডের উদাহরণ

  • সত্তাটি উপস্থিত না থাকলে Inোকান, অন্যথায় আপডেট করুন।

      db.UpdateGraph(entity);
    
  • এটি উপস্থিত না থাকলে সত্তা Inোকান, অন্যথায় আপডেট করুন এবং চাইল্ড অবজেক্টটি উপস্থিত না থাকলে inোকান, অন্যথায় আপডেট করুন।

      db.UpdateGraph(entity, map => map.OwnedEntity(x => x.ChildObject));
    

3

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

    public override int SaveChanges()
    {
        var added = this.ChangeTracker.Entries().Where(e => e.State == System.Data.EntityState.Added);

        // Do your thing, like changing the state to detached
        return base.SaveChanges();
    }

2

আমি প্রোফাইলটি সংরক্ষণ করার চেষ্টা করার সময় আমি একই সমস্যা পেয়েছি, আমি ইতিমধ্যে নমুনা টেবিল করেছি এবং প্রোফাইল তৈরির জন্য নতুন। আমি প্রোফাইল inোকানোর সময় এটি অভিবাদন সন্নিবেশ করান সুতরাং আমি সেভচেনজেঞ্জ () এর আগে এরকম চেষ্টা করেছি।

db.Entry (প্রোফাইল.সালুটেশন)। স্টেট = অ্যান্টিস্টেট.অনচ্যানড;


1

এটি আমার পক্ষে কাজ করেছে:

// temporarily 'detach' the child entity/collection to have EF not attempting to handle them
var temp = entity.ChildCollection;
entity.ChildCollection = new HashSet<collectionType>();

.... do other stuff

context.SaveChanges();

entity.ChildCollection = temp;

0

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


0

আমি জানি এটি পুরাতন পোস্ট তবে আপনি যদি কোড-প্রথম পদ্ধতির ব্যবহার করছেন তবে আপনি আপনার ম্যাপিং ফাইলে নিম্নলিখিত কোড ব্যবহার করে পছন্দসই ফলাফল অর্জন করতে পারেন।

Ignore(parentObject => parentObject.ChildObjectOrCollection);

এটি EF কে মূলত "চাইল্ডবজেক্টঅরক্লেশন" বৈশিষ্ট্যটি মডেল থেকে বাদ দিতে বলবে যাতে এটি ডাটাবেসে ম্যাপ না হয়।


"উপেক্ষা" কোন প্রসঙ্গে ব্যবহৃত হচ্ছে? এটি অনুমান করা প্রসঙ্গে উপস্থিত বলে মনে হয় না।
T3.0

0

সত্তা ফ্রেমওয়ার্ক কোর ৩.১.০ ব্যবহার করে আমার অনুরূপ চ্যালেঞ্জ ছিল, আমার রেপো লজিকটি বেশ সাধারণ gener

এটি আমার পক্ষে কাজ করেছে:

builder.Entity<ChildEntity>().HasOne(c => c.ParentEntity).WithMany(l =>
       l.ChildEntity).HasForeignKey("ParentEntityId");

দয়া করে মনে রাখবেন "প্যারেন্টেটিটিআইডি" হ'ল সন্তানের সত্তার বিদেশী কী কলামের নাম। আমি এই পদ্ধতিতে উল্লিখিত কোডের লাইনটি যুক্ত করেছি:

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