التحقق من صحة مفاتيح فريدة من نوعها مع ASP.NET MVC و LinQ إلى SQL؟

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

سؤال

لدي جدول SQL Server مع حقول 2 ومعرف (المفتاح الأساسي) والاسم (مفتاح فريد). أنا أستخدم LinQ إلى SQL لإنتاج كائنات نموذجية ل ASP.NET MVC من هذا الجدول.

لأداء التحقق من صحة النموذج التي قمت بتطبيق IDATERRORINFO في فئة جزئية

public partial class Company : IDataErrorInfo
{
    private Dictionary<string, string> _errors = new Dictionary<string,string>();

    partial void OnNameChanging(string value)
    {
        if (value.Trim().Length == 0)
        {
            _errors.Add("Name", "Name is required");
            return;
        }
    }
}

هذا ينفذ كما هو متوقع مع Model.Isvalid Property و HTML.Validationsummary Helper.

ومع ذلك، فإن هذا الرمز هو مجرد التحقق من أن الشركة التي تم إنشاؤها حديثا لها اسم غير فارغ. أحتاج أيضا إلى التحقق مما إذا تم استخدام الاسم من قبل شركة أخرى في الجدول.

يمكنني فقط استدعاء طريقة AddCompany على مستودعي وقبض على SQLException، لكن هذا يشعر بالتسير.

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude="ID")] Company companyToCreate)
{
if (!ModelState.IsValid)
{
    return View();
}
//Add to the Database
try
{
    _companyRepos.AddCompany(companyToCreate);
    return RedirectToAction("Index");
}
catch(SQLException ex)
{
    return View("do something to show the error inserting");
}
}

من الناحية المثالية، أريد طريقة التسليين في الفصل الجزئي لأداء التحقق من المفتاح الفريد قبل أن أحاول إضافة الشركة.

أي أفكار حول كيفية القيام بذلك؟ الفكر الوحيد لدي حتى الآن هو إنشاء اتصال قاعدة بيانات طازج في الفئة الجزئية واستعلام الجدول.

شكرًا

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

المحلول

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

نصائح أخرى

احتمال واحد هو طريقة AddCompany لإرجاع المنطقي يشير إلى نجاح أو فشل العملية.

ومع ذلك، من المعتاد التقاط هذا النوع من الخطأ قبل محاولة إضافة السجل. وضع

bool Exists(string companyName) 

الطريقة في مستودع الشركة الخاصة بك، واستخدام هذا لالتقاط الخطأ قبل محاولة إضافة السجل.

السبب هذا هو الأفضل هو أنك تعرف بالضبط سبب حدوث الفشل. خلاف ذلك، عليك إما أن تلتقط استثناء مخصص أو فحص رمز الخطأ الذي تم إرجاعه.

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