সত্তা ফ্রেমওয়ার্ক কোড-প্রথম নাল বিদেশী কী


107

আমার একটি User< Countryমডেল আছে। একজন ব্যবহারকারী একটি দেশের অন্তর্গত, তবে এটি কোনও (নাল বিদেশী কী) এর সাথে সম্পর্কিত নাও হতে পারে।

আমি কীভাবে এটি সেট আপ করব? যখন আমি কোনও নাল দেশের সাথে কোনও ব্যবহারকারীকে sertোকানোর চেষ্টা করি, এটি আমাকে বলে যে এটি নাল হতে পারে না।

মডেলটি নিম্নরূপ:

 public class User{
    public int CountryId { get; set; }
    public Country Country { get; set; }
}

public class Country{
    public List<User> Users {get; set;}
    public int CountryId {get; set;}
}

ত্রুটি: A foreign key value cannot be inserted because a corresponding primary key value does not exist. [ Foreign key constraint name = Country_Users ]"}


আমি ভুল হলে আপনি দয়া করে আমাকে সংশোধন করতে পারেন? একটি বিদেশী কী হ'ল কোড প্রথম এসপ নেটওয়্যার এমভিসি - 5 সত্ত্বার কাঠামোর মধ্যে ন্যূনতম UL
অটুট

1
যদি আমরা এটি অযোগ্য করতে চাই। আমাদের "হয় প্রয়োজনীয়" বৈশিষ্ট্যটি সাজাতে না পারলে আমাদের সাবলীল এপিআই ব্যবহার করতে হবে। আমি কি সঠিক?
অটুট

2
আমরা যদি তা না করি তবে বিদেশী কীটি নুলাবলিকে ডিফল্ট করা হবে
অবিচ্ছেদ্য

উত্তর:


165

আপনাকে অবশ্যই আপনার বিদেশী কীটি বাতিল করতে হবে:

public class User
{
    public int Id { get; set; }
    public int? CountryId { get; set; }
    public virtual Country Country { get; set; }
}

7
ভার্চুয়াল কি করে?
শন ম্লেয়ান

32
অলস লোডিংয়ের জন্য ভার্চুয়াল প্রয়োজনীয়।
লাডিস্লাভ মৃঙ্কা

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

1
@ ট্রাভিজেজে ইউআরআর .উত্তর ফিরে আসে ... তা হলে ব্যতিক্রম (অনুকূল) if
ধরুন

7
এছাড়াও - এটি Guidবেসড কীগুলির জন্য কাজ করে বলে মনে হচ্ছে না । (এটি তাদের অবিস্মরণীয়, নিশ্চিত করে তোলে, তবে একটি স্বয়ংক্রিয়ভাবে উত্পন্ন বিদেশী কী সীমাবদ্ধতার কারণে বিদেশী কী সেট দিয়ে ডাটাবেসে রেকর্ড সংরক্ষণ ব্যর্থ হয়)) :-(
ব্রেইনস্লাগস

8

আমি এটিকে (নীচে) পছন্দ করি:

public class User
{
    public int Id { get; set; }
    public int? CountryId { get; set; }
    [ForeignKey("CountryId")]
    public virtual Country Country { get; set; }
}

কারণ EF ডাটাবেস টেবিলের মধ্যে 2 বিদেশী কী তৈরি করছিল: কান্ট্রিআইডি এবং কান্ট্রিআইডি 1, তবে উপরের কোডটি এটি ঠিক করে দিয়েছে।


6

আমার এখন একই সমস্যা আছে, আমার কাছে বিদেশী কী আছে এবং আমার এটিকে সমাধান করার মতো দরকার, আপনার সমস্যাটি সমাধান করার জন্য

    modelBuilder.Entity<Country>()
        .HasMany(c => c.Users)
        .WithOptional(c => c.Country)
        .HasForeignKey(c => c.CountryId)
        .WillCascadeOnDelete(false);

DBContext ক্লাসে আমি আপনাকে দেরি করে উত্তর দেওয়ার জন্য দুঃখিত:


3

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

এখানে চিত্র বর্ণনা লিখুন

নীচে গাইড লিঙ্ক:

https://docs.microsoft.com/en-gb/ef/ef6/fundamentals/relationships?redirectedfrom=MSDN

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