أفضل الممارسات ASP.NET MVC (MVC2) عند إدخال/تحديث البيانات باستخدام LINQ إلى SQL وطبقات المستودع

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

سؤال

أنا في بعض الشيء من اللغز هنا وآمل أن يساعد بعضكم المعلمون في ملء الفراغات.

الموقف الذي أواجهه حاليًا فيما يتعلق بجدول "المستخدمين" وجدول "OpenID" الخاص بي. يتيح تطبيقي للمستخدم أن يكون لديه متعددة OpenId ، لذلك أتتبعها في جدول منفصل.

المستخدمون
بطاقة تعريف
اسم المستخدم

OpenID
بطاقة تعريف
معرف المستخدم
ادعاء identifier

لدي مستودع CRUD لكل جدول ، ولدي أيضًا خدمة تتعامل مع المستودع (خدمة واحدة لكل ريبو).

والسؤال الذي لدي هو فيما يتعلق بإدخال مستخدم جديد (لأن التحديث سيتبع نفس المدير). فيما يلي الخيارات التي لدي في رأسي.

  1. اطلب من المستخدمين إدراج مستخدم جديد ، واسترجع معرف المستخدم ثم أدخل فتحة مفتوحة جديدة باستخدام معرف المستخدم
  2. اطلب من المستخدمين إرسال المستخدم الجديد إلى جانب identiDefier إلى userrepository ، واطلب من المستودع إدراج كل من المستخدم و OpenID (هذا لا يتناسب مع منهجية Crud بشكل جيد للغاية)
  3. قم بإنشاء طريقة عرض لكل من جدول المستخدم وجدول OpenId ، وإنشاء مستخدمي orsoPenIdRepository و userSopenIdservice ، ثم إدراجها في العرض.

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

يرجى ملاحظة أنني لا أستخدم nhibernate حيث يمكنني تصميم نطاقي حتى أراه مناسبًا. أنا متمسك بـ LINQ إلى SQL في هذا المشروع ،

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

المحلول

في تجربتي ، لا يتناسب LINQ2SQL لمنهجية CRUD جيدًا على أي حال. إن جعلها لائقة يعني القفز من خلال الكثير من الأطواق لتكون تستحق ذلك حقًا. المشكلة التي تصفها ليست حتى واحدة فقط - تزداد سوءًا عند تحديث الكيانات.

لذلك اخترت الحل 2 (إدخال كلا الكيانين في المستخدمين) في مشروعي الحالي.

لقد تخليت أيضًا عن أساليب التحديث للمستودعات. unstead مستودعات بلدي ببساطة لديها طريقة subcitchanges يجب أن يتم استدعاؤها بعد إجراء جميع التحديثات على الكيانات المحملة. تشارك جميع المستودعات التي تم إنشاؤها في نفس طلب الويب نفس DataContext ، لذلك لا يهم حقًا المستودع الذي أسميه Submitchanges. إنه ليس Crud ، لكنه يفسح المجال بشكل أفضل لطريقة LINQ2SQL لتنفيذ تحديثات قاعدة البيانات.

إذا كنت تريد حقًا Crud Pure تمامًا ، فقد ترغب في التحقق من EF مع قالب توليد كيان POCO.

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