একটি রেফারেন্সিয়ালকন্ট্রেন্টের একটি নির্ভরশীল সম্পত্তি স্টোর-উত্পন্ন কলামে ম্যাপ করা হয়


98

ডাটাবেসে লেখার সময় আমি এই ত্রুটিটি পেয়েছি:

একটি রেফারেন্সিয়ালকন্ট্রেন্টের একটি নির্ভরশীল সম্পত্তি স্টোর-উত্পন্ন কলামে ম্যাপ করা হয়। কলাম: 'পেমেন্ট আইড'।

public bool PayForItem(int terminalId, double paymentAmount, 
      eNums.MasterCategoryEnum  mastercategoryEnum, int CategoryId, int CategoryItemId)
    {

        using (var dbEntities = new DatabaseAccess.Schema.EntityModel())
        {
            int pinnumber = 0;
            long pinid = 1; //getPinId(terminalId,ref pinnumber) ;
            var payment = new DatabaseAccess.Schema.Payment();
            payment.CategoryId = CategoryId;
            payment.ItemCategoryId = CategoryItemId;
            payment.PaymentAmount = (decimal)paymentAmount;
            payment.TerminalId = terminalId;
            payment.PinId = pinid;

            payment.HSBCResponseCode = "";
            payment.DateActivated = DateTime.Now;
            payment.PaymentString = "Payment";
            payment.PromotionalOfferId = 1;
            payment.PaymentStatusId = (int)eNums.PaymentStatus.Paid;

            //payment.PaymentId = 1;

            dbEntities.AddToPayments(payment);
            dbEntities.SaveChanges();
        }
        return true;
    }

স্কিমাটি হ'ল:

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

উত্তর:


181

আপনি কি টেবিলের মধ্যে খারাপ কলামের সম্পর্ককে সংজ্ঞায়িত করতে পারেন? বিভিন্ন কলাম এবং একটি স্বায়ত্তশাসিত হিসাবে সেট করা হয়েছিল।

এটা আমার সাথে ঘটেছিল.


55
আমি ভুল করে আমার বিদেশী কীগুলির একটি পরিচয় (স্বতঃবৃদ্ধি) তৈরি করেছি। এই ত্রুটিটি আমি পেয়েছি।
জোকুল

4
দোহ! আমি এসকিউএল সার্ভার ২০০৮ ম্যানেজমেন্ট স্টুডিওর দেওয়া ডিফল্ট হিসাবে সম্পর্কের বিদেশী কী অংশটি রেখে দিয়েছিলাম, যা চাইল্ড টেবিলের প্রাথমিক কী ক্ষেত্র ছিল, বিদেশী কী মানটি ধারণ করার জন্য আমি যে কলামটি তৈরি করেছিলাম তা নয়।
ডাকাত

12
আপনি যদি কুইক ওয়াচ উইন্ডোতে (যেমন (e as System.Data.Entity.Infrastructure.DbUpdateException).Entries) ব্যতিক্রমটি পরীক্ষা করেন , আপনি দেখতে পাচ্ছেন কোন টেবিলটিতে রেফারেন্স দেওয়া প্রাথমিক কী রয়েছে।
সি

17
যদি ইএফ ত্রুটি বার্তাগুলি কেবল গাবল্ডি-গুক ছিটিয়ে দেওয়ার পরিবর্তে সমস্যাটি কী বলে তবে তা শীতল হবে না?
এআর

আমি এই ক্যোয়ারীটি সমস্ত সম্পর্ক এক দর্শনে দেখতে ব্যবহার করেছি stackoverflow.com/questions/8094156/…
ডেভ

48

এই ত্রুটিটি বলে যে আপনি অসমর্থিত সম্পর্ক ব্যবহার করছেন বা আপনার ম্যাপিংয়ে ত্রুটি রয়েছে। আপনার কোডটি সম্ভবত ত্রুটির সাথে একেবারেই সম্পর্কিত নয়।

ত্রুটির অর্থ হল যে সত্তাগুলির মধ্যে নির্ভরশীল সত্তায় বিদেশী মূল সম্পত্তিটি স্টোর উত্পন্ন হিসাবে নির্ধারিত হয়েছে এর মধ্যে আপনার কিছু সম্পর্ক রয়েছে। স্টোর উত্পন্ন বৈশিষ্ট্যগুলি ডাটাবেসে ভরাট হয়। EF বিদেশী কী হিসাবে উত্পন্ন বৈশিষ্ট্যগুলিকে (পাশাপাশি প্রাথমিক কীগুলিতে গণিত বৈশিষ্ট্য) সমর্থন করে না।


4
আমি একই তথ্যের সাথে সিকিএল সার্ভারে সারিটি যুক্ত করতে পারি। আপনি যখন স্টোর জেনারেটেড বলবেন, আপনি একটি উদাহরণ দিতে পারেন?
ওয়েলশ কিং

4
EF এসকিউএল সার্ভার নয়। এটির নিজস্ব সীমাবদ্ধতা রয়েছে। আপনি যেখানে ডিবির উত্পন্ন যে কোনও এফকে সম্পত্তি বলা PaymentIDহয় তা ব্যবহার করুন এবং এটির সাথে ডিল করুন Simp
লাডিস্লাভ শ্রীঙ্কা

ঠিক আছে আমাদের একটি পেমেন্টিস্টি টেবিল রয়েছে যা পেমেন্ট করেছে বিদেশী কী হিসাবে, আমাকে কি সেখানে একটি সারি যুক্ত করতে হবে?
ওয়েলশ কিং

এটি সারি যুক্ত করার বিষয়ে নয় কলামটির সংজ্ঞা সম্পর্কে। আপনি কীভাবে এই কলামটি সেট করবেন?
লাডিস্লাভ মৃঙ্কা

কেবল ভিজ্যুয়াল স্টুডিওতে সম্পর্কের মডেলটি ক্লিক করেছেন এবং নাম পেয়েছে 'পেমেন্ট' নামটি 'পেমেন্ট' টাইপ হিসাবে ব্যবহার করা যায় না। সদস্যের নামগুলি তাদের ঘেরের ধরণের মতো হতে পারে না। কোনও ধারণা
ওয়েলশ কিং

8

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

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

আমি ডিজাইনার দ্বারা উত্পাদিত এক্সএমএল (এসএসডিএল) দেখেছি এবং এই বৈশিষ্ট্যগুলি এখনও সেখানে ছিল তাই আমি সেগুলি ম্যানুয়ালি সরিয়েছি। আমাকে ডাটাবেজে কলামগুলিও ঠিক করতে হয়েছিল (টেবিল তৈরির এসকিউএল থেকে পরিচয় (1,1) সরান)

এর পরে, সমস্যাটি চলে গেল।


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

6

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

স্কয়ার সার্ভার টেবিল ডিজাইন প্রবাহ

এই চিত্রটিতে আপনি দেখতে পাবেন যে জবআইডিআইডিটি টেবিলের প্রাথমিক কী তবে ভুলভাবে বিদেশী কী।


2

কনফিগারেশনে প্রাথমিক কীটি অপ্রয়োজনীয় সংজ্ঞায়িত করে আমার সমস্যা দেখা দিয়েছে।

this
   .Property(p => p.Id)
   .HasColumnName(@"id")
   .IsRequired()
   .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity) // this is redundant when you want to configure a One-to-Zero-or-One relationship
   .HasColumnType("int");

এই লাইনটি সরান

.হ্যাসড্যাটাবেস জেনারেটেড অপশন (ডাটাবেস জেনারেটেড অপশন.আইডেন্টিটি)


উদাহরণ http://www.entityframeworktutorial.net/code-first/configure-one-to-one-referenceship-in-code-first.aspx

সম্পর্কের সংজ্ঞা দেওয়ার জন্য এটি যথেষ্ট

// Configure Student & StudentAddress entity
modelBuilder.Entity<Student>()
            .HasOptional(s => s.Address) // Mark Address property optional in Student entity
            .WithRequired(ad => ad.Student); // mark Student property as required in StudentAddress entity. Cannot save StudentAddress without Student

1

পেমেন্ট এবং অন্যান্য সারণী / সত্তার মধ্যে সম্পর্ক পুনরায় পরীক্ষা করুন। পেমেন্টআইডি থাকা উচিত নয় এমনগুলি সহ কারণ সমস্যাটি সম্ভবত লুকিয়ে রয়েছে।

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

এছাড়াও, সমস্যাযুক্ত সম্পর্ক স্থির করার পরে, মডেলটির একটি সহজ "রিফ্রেশ" মডেল থেকে ভ্রান্ত সম্পর্কটিকে সঠিকভাবে সরিয়ে দেবে না এবং " ফিক্স " করার পরেও আপনি একই ত্রুটি পাবেন , তাই নিজেকে রিফ্রেশ করার আগে মডেলটিতে এটি করুন। (আমি এটি হার্ড উপায় খুঁজে পেয়েছি।)


1

আপনি যদি নিজের সম্পর্কগুলি পরীক্ষা করে থাকেন এবং সেখানে ভাল থাকেন।

এডিএমএক্সে সারণীটি মুছুন এবং তারপরে ডাটাবেস থেকে আপডেট করুন। এটি আপনাকে ম্যানুয়ালি আপডেটটি করে সংরক্ষণ করবে।


সত্যিই আপনার পরামর্শের জন্য ধন্যবাদ, আমি আমার ডাটাবেসটি যাচাই করতে 1 ঘন্টা ব্যয় করেছি, তবে অপসারণের পরে আপডেট করার পরে, সবকিছু ঠিক আছে।
টান এনগুইন

1

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


1

গৃহীত উত্তরের পাশাপাশি, আপনি যদি EF বিপরীত পোকো জেনারেটর বা অন্য কোনও সরঞ্জাম ব্যবহার করছেন যা আপনার পোকো তৈরি করে, আপনি সেগুলি পুনরায় জেনারেট করে নিন!


আপনার বাহ্যিক ডিবি-প্রথম ইএফ মডেল জেনারেটর (প্রসঙ্গগুলি ধরে রেখে) সংশোধন করার পরে আপনার কাস্টম টি 4 সরঞ্জামটি (পোকো ধরে রাখা) পুনরায় চালাতে কখনই ভুলবেন না ... কখনও! এক্সডি (পাশাপাশি পাগলও হতে পারে-'- ')
শকওভার

0

আমার ক্ষেত্রে সমস্যাটি দ্বিমুখী 1-1 টি সম্পর্ক থাকার কারণে হয়েছিল:

class Foo{
[Key]
Id
[ForeignKey]
BarId
...
}
class Bar{
[Key]
Id
[ForeignKey]
FooId
...
}

আমাকে কেবল দুটি বিদেশী কী (যেভাবেই প্রয়োজন হয় না) সরিয়ে ফেলতে হয়েছিল।


0

আমার ক্ষেত্রে এটি কেবল ছিল যে আমার কাছে ডাটাবেসে সঠিকভাবে অনুমতি নেই। আমি কেবল সেটটি পড়েছি এবং সত্ত্বার কাঠামোটি আমাকে একটি রেফারেনশিয়াল কনস্ট্রিটের ত্রুটি দিচ্ছিল যা আমাকে ফেলে দিয়েছে। অতিরিক্ত লেখার অনুমতি যুক্ত এবং সব ভাল ছিল।


0

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

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

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

সুতরাং, আমার আসল সত্তাটি এরকম দেখাচ্ছে:

public partial class MyEntity
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid id{ get; set; }


    // Navigation
    [ForeignKey("id")]
    public PathEntity Path { get; set; }
}

সুতরাং আমি একটি বিশেষ উত্তরাধিকারসূত্রে প্রসঙ্গ তৈরি করেছি যা দেখতে এরকম দেখাচ্ছে:

    private class _navPropInhibitingContext : EF.ApplicationDBContext
    {
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            modelBuilder.Entity<MyEntity>()
                .Ignore(e => e.Path);

        }
    }

এবং তারপরে কোডটি পরিবর্তন করে যা নতুন প্রসঙ্গ ধরণের ব্যবহারকারী তৈরি করতে নতুন সত্তা তৈরি করেছে

    using (var specialContext = new _navPropInhibitingContext())
    {
        var dbModel = new MyEntity() 
        {
            ...
        };

        specialContext.MyEntity.Add(dbModel);
        await specialContext.SaveChangesAsync();
    }

আশা করি এটি কারও সাহায্য করবে


0

আমার ক্ষেত্রে আইডি ফিল্ড উইচ এফ কে সবেমাত্র সত্তা ফ্রেমওয়ার্কে "স্টোর জেনারেটেড প্যাটার্ন" "কিছুই নয়" এর পরিবর্তে "আইটেনটি" সেট করা হয়েছিল

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