أفضل الممارسات ASP.NET MVC (MVC2) عند إدخال/تحديث البيانات باستخدام LINQ إلى SQL وطبقات المستودع
-
29-09-2019 - |
سؤال
أنا في بعض الشيء من اللغز هنا وآمل أن يساعد بعضكم المعلمون في ملء الفراغات.
الموقف الذي أواجهه حاليًا فيما يتعلق بجدول "المستخدمين" وجدول "OpenID" الخاص بي. يتيح تطبيقي للمستخدم أن يكون لديه متعددة OpenId ، لذلك أتتبعها في جدول منفصل.
المستخدمون
بطاقة تعريف
اسم المستخدمOpenID
بطاقة تعريف
معرف المستخدم
ادعاء identifier
لدي مستودع CRUD لكل جدول ، ولدي أيضًا خدمة تتعامل مع المستودع (خدمة واحدة لكل ريبو).
والسؤال الذي لدي هو فيما يتعلق بإدخال مستخدم جديد (لأن التحديث سيتبع نفس المدير). فيما يلي الخيارات التي لدي في رأسي.
- اطلب من المستخدمين إدراج مستخدم جديد ، واسترجع معرف المستخدم ثم أدخل فتحة مفتوحة جديدة باستخدام معرف المستخدم
- اطلب من المستخدمين إرسال المستخدم الجديد إلى جانب identiDefier إلى userrepository ، واطلب من المستودع إدراج كل من المستخدم و OpenID (هذا لا يتناسب مع منهجية Crud بشكل جيد للغاية)
- قم بإنشاء طريقة عرض لكل من جدول المستخدم وجدول OpenId ، وإنشاء مستخدمي orsoPenIdRepository و userSopenIdservice ، ثم إدراجها في العرض.
أي أفكار أو اقتراحات أخرى تتجاوز ما يمكنني التفكير فيه سيكون موضع تقدير كبير.
يرجى ملاحظة أنني لا أستخدم nhibernate حيث يمكنني تصميم نطاقي حتى أراه مناسبًا. أنا متمسك بـ LINQ إلى SQL في هذا المشروع ،
المحلول
في تجربتي ، لا يتناسب LINQ2SQL لمنهجية CRUD جيدًا على أي حال. إن جعلها لائقة يعني القفز من خلال الكثير من الأطواق لتكون تستحق ذلك حقًا. المشكلة التي تصفها ليست حتى واحدة فقط - تزداد سوءًا عند تحديث الكيانات.
لذلك اخترت الحل 2 (إدخال كلا الكيانين في المستخدمين) في مشروعي الحالي.
لقد تخليت أيضًا عن أساليب التحديث للمستودعات. unstead مستودعات بلدي ببساطة لديها طريقة subcitchanges يجب أن يتم استدعاؤها بعد إجراء جميع التحديثات على الكيانات المحملة. تشارك جميع المستودعات التي تم إنشاؤها في نفس طلب الويب نفس DataContext ، لذلك لا يهم حقًا المستودع الذي أسميه Submitchanges. إنه ليس Crud ، لكنه يفسح المجال بشكل أفضل لطريقة LINQ2SQL لتنفيذ تحديثات قاعدة البيانات.
إذا كنت تريد حقًا Crud Pure تمامًا ، فقد ترغب في التحقق من EF مع قالب توليد كيان POCO.