مجموعة البيانات المكتوبة بقوة:إدراج علاقات متعدد إلى متعدد

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

سؤال

لدي علاقة متعدد بمتعدد في 3 جداول: ProgramUserGroup و ميزة هما الجدولان الرئيسيان، والرابط بينهما هو LinkFeatureWithProgramUserGroup, ، حيث لدي علاقات مفاتيح خارجية بالجدولين الأصليين.

لدي مجموعة بيانات تحتوي على إدراجات:أريد إضافة صف جديد إلى ProgramUserGroup، وميزة ذات صلة (موجودة) إلى جدول LinkFeatureWithProgramUserGroup.عند إدراج صفوف جديدة، أقوم بتعيين المعرف الافتراضي إلى -1:

<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">   <DataSetUserGroup xmlns="http://tempuri.org/DataSetUserGroup.xsd">
<ProgramUserGroup diffgr:id="ProgramUserGroup1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
  <id>-1</id>
  <Name>99999999999</Name>
  <Active>false</Active>
</ProgramUserGroup>
<LinkFeatureWithProgramUserGroup diffgr:id="LinkFeatureWithProgramUserGroup1" msdata:rowOrder="0" diffgr:hasChanges="inserted">
  <id>-1</id>
  <Feature_id>7</Feature_id>
  <ProgramUserGroup_id>-1</ProgramUserGroup_id>
</LinkFeatureWithProgramUserGroup>  </DataSetUserGroup> </diffgr:diffgram>

أثناء تحديث الجداول يظهر لي الخطأ:

"تتعارض عبارة INSERT مع قيد FOREIGN KEY "FK-LinkFeatu-Progr-7DCDAAA2".حدث التعارض في قاعدة البيانات "x"، الجدول "dbo.ProgramUserGroup"، العمود "id"."

رمز التحديث هو التالي:

 DataSetUserGroupTableAdapters.LinkFeatureWithProgramUserGroupTableAdapter lfa = new LinkFeatureWithProgramUserGroupTableAdapter();
 DataSetUserGroupTableAdapters.ProgramUserGroupTableAdapter pug = new ProgramUserGroupTableAdapter();

 pug.Update(dsUserGroup.ProgramUserGroup);
 lfa.Update(dsUserGroup.LinkFeatureWithProgramUserGroup);

إذا قمت بالتحقق من معرف الصف الجديد لجدول ProgramUserGroup، فقد تم تحديثه من -1 إلى @@identity (مثل 1099)، لذا فلا بأس - فهو يُدرج الصف الجديد.

ولكن في الجدول LinkFeatureWithProgramUserGroup، لا تزال قيمة ProgramUserGroup.ID ذات الصلة هي -1، ولم يتم تحديثها على أية حال.

كيف يمكنني فرض تحديث مفاتيح جدول الارتباط أيضًا؟لقد حاولت

 pug.Update(dsUserGroup.ProgramUserGroup);
 dsUserGroup.Merge(dsUserGroup.ProgramUserGroup);
 lfa.Update(dsUserGroup.LinkFeatureWithProgramUserGroup);

لكن لم تحل المشكلة :(

شكرًا،

ب.

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

المحلول

نعم, ، هناك حل بديل لهذا.

هذه هي الطريقة التي يمكنك القيام بها.

  1. فتح خصائص ProgramUserGroupTableAdapter -> استعلام التحديد الافتراضي -> الخيارات المتقدمة.والتحقق من خيار قم بتحديث جدول البيانات.احفظ المحول الآن.الآن عند الاتصال بالتحديث على محول الجدول، فإن سيتم تحديث جدول البيانات [تحديثه] بعد عملية التحديث وسوف تعكس أحدث القيم من جدول قاعدة البيانات. إذا تم تعيين المفتاح الأساسي أو أي عمود على الزيادة التلقائية، فسيحتوي جدول البيانات على آخر قيمة بعد التحديث الأخير.

  2. يمكنك الآن استدعاء التحديث باسم pug.Update(dsUserGroup.ProgramUserGroup);

  3. اقرأ أحدث القيم من أعمدة ProgramUserGroup وقم بتعيين القيم المعنية في الجدول الفرعي قبل التحديث.وهذا سوف يعمل بالضبط بالطريقة التي تريدها.

نص بديل http://ruchitsurati.net/files/tds1.png

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