إطار الكيان/.NET 4.0: بوكو وتوفير الكثير من العلاقات

StackOverflow https://stackoverflow.com/questions/1631533

  •  06-07-2019
  •  | 
  •  

سؤال

كيف يجب أن أقوم بإعداد خاصية بحيث عند استخدام Savechanges ، يتم حفظ علاقة كثيرة إلى واحدة ولا أحصل على: إدراج عبارة تتعارض مع القيد المفتاح الخارجي ... خطأ.

بسيطة جدا ، لدي إعلان و adtype حيث يوجد العديد من الإعلانات إلى adtype واحد. هناك خاصية على م:

public class Ad
{
   public Int32 AdTypeId { get; set; }
   public virtual AdType AdType { get; set; }
}

لتغطية هذه العلاقة.

عندما أفعل هذا:

someAd.AdType = someAdType;

تم تعيين العقار على ما يرام ، لكن AdTypeid ليس كذلك. لا تقلق على الرغم من أنني أفترض أن هذا سيكون على ما يرام.

context.SaveChanges();

المشكلة في هذه المرحلة ، تحاول حفظ القيمة 0 في عمود ADTYPEID (مما تسبب في مشكلة مفتاح خارجي) بدلاً من استخدام خاصية ADTYPE المعينة للكائن لمعرفة ما ينبغي إدراجه في العمود ADTYPEID.

أشياء أعرفها:

  • في هذه المرحلة ، تم استمرار Someadtype/لديه معرف.
  • يتم تعيين خاصية AdType بشكل صحيح.
  • adtypeid هو 0.
  • هناك علاقة مفتاح خارجي قاعدة البيانات.
  • AdTypeid هو مفتاح أساسي.
  • لقد قمت بتأجيل/كسول تحميل إلى صحيح

لم أحاول حقًا تغيير ADTYPE لأنه تم إعداده للسماح بالتحميل كسول.

هل كانت مفيدة؟

المحلول

حسنًا ، يبدو أنني أستخدم نهج "تتبع التغيير القائم على اللقطة" غير المحلي (جعل هذه الكلمة ... ياه) ، ليس لديه فكرة حقيقية بأنه قد تغير.

في هذا المثال ، يعتبر العميل نوعًا بوكو نقيًا. على عكس كيانات EntityObject أو IPOCO ، فإن إجراء تغييرات على الكيان لا يحافظ تلقائيًا على مدير الحالة المزامنة لأنه لا يوجد إشعار تلقائي بين كيانات POCO الخالصة وإطار الكيان. لذلك ، عند الاستعلام عن مدير الدولة ، يعتقد أن حالة كائن العميل لم تتغير على الرغم من أننا نجحنا بوضوح في تغيير في أحد الخصائص على الكيان.

حصلت على ذلك من هنا

لذلك للتأكد من أنه يعرف التحقق لمعرفة ما إذا كان هناك تغيير يجب أن أستخدمه AceptAllChangesaftersave الخيار مع طريقة Savechanges.

context.SaveChanges(System.Data.Objects.SaveOptions.AcceptAllChangesAfterSave);

ويعمل. آمل أن أفهم ذلك بشكل صحيح ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top