سؤال

وونتيجة وظيفة النموذج، أنا أحاول حفظ سجل العلامة التجارية الجديدة. من وجهة نظري، الجنس هو المنسدلة، والعودة إلى صحيح، والذي يتم ملؤها من ViewData ( "نوع الجنس")

ولقد الإعداد ربط بلادي كما يلي:

gID = CInt(Request.Form("Gender"))
Brand.GenderReference.EntityKey = New EntityKey("DB_ENTITIES.Gender", "Id", gID)
TryUpdateModel(Brand)
DB.SaveChanges()

والذي ينتج الخطأ التالية.

Entities in 'DB_ENTITIES.Brand' participate in the 'FK_Brand_Gender' relationship. 0 related 'Gender' were found. 1 'Gender' is expected.

ويمكن للشخص أن يفسر المعلمات في سهل الانجليزية بالنسبة لي. لقد حاولت ايضا DB.Gender كمعلمة الأولى ولكن لا فرح.

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

المحلول

وبدلا من خلق EntityKey إنشاء كائن كعب الجنس (آسف أنا لست رجل VB ذلك في C #):

Gender g = new Gender{ID = Int32.Parse(Request.Form("Gender"))};

وثم إرفاق الجنس إلى EntitySet المناسب (اسم الخاصية على DB أن تحصل الكيانات الجنس من هو سلسلة أدناه):

DB.AttachTo("Genders",g);

وهذا يضع قاعدة البيانات في الدولة حيث الجنس هو في ObjectContext في الدولة على حالها دون استعلام قاعدة بيانات. الآن يمكنك بناء علاقة وفقا لطبيعتها

brand.Gender = g;
DB.AddToBrand(brand);
DB.SaveChanges();

وهذا هو كل ما في الامر. لا حاجة لطين حولها مع EntityKeys

ويساعد هذا الأمل

اليكس

نصائح أخرى

ما عليك هو مثيل على حد سواء العلامة التجارية والجنس ثم قم بتعيين Brand.Gender إلى مثيل الجنس. ثم يمكنك حفظ دون مشاكل.

وطيب هيريس ما جئت مع بدلا من استخدام updateModel. يبدو أن / يحتمل خطرا أمنيا مشكلة على أي حال مع الحقول يحتمل إضافية يتم إضافتها في هذا المنصب. نسخة جديدة من الجنس يمكن مثيل عبر trygetObjectByKey. هذا وتعمل حتى الآن. أي اقتراحات أخرى على الحصول على UpdateModel لتحديث كائن خاصية الجنس التقدير.

Dim cID As Integer
cID = CInt(Request.Form("Gender"))
Dim key As New EntityKey(DB.DefaultContainerName() & ".Gender", "ID", cID)

Dim objGenderDS As New Gender
'Bring back the Gender object.
If DB.TryGetObjectByKey(key, objGenderDS) Then
Brand.GenderReference.EntityKey = key
Brand.Gender = objGenderDS
DB.AddToBrand(Brand)
DB.SaveChanges()
Else
End If
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top