سؤال

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


@ أوريون إدواردز

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

لن "يتعطل" برنامجي، بل سيطرح استثناءً.Lucky for me .net لديه مجموعة كاملة من الفصول المخصصة لمثل هذه المناسبة.وفي ذلك الوقت سأقوم بتحديث بياناتي القديمة وإعادتها إلى قاعدة البيانات.هذا هو الهدف من هذا المجال (أو الموقف، حسب الحالة).

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

المحلول

يمكنك استخدام التسلسل - يسمح لك بتخزين العنصر الخاص بك على الأقل في 3 أشكال:ثنائي (مناسب لـ BLOBs)، XML (الاستفادة من نوع بيانات XML الخاص بـ MSSQL) أو مجرد نص عادي (تخزين في varchar أو عمود نص)

نصائح أخرى

قبل أن تسلك هذا الطريق نحو جنونك النهائي، يجب عليك إلقاء نظرة على هذا (أو كرره يومًا ما):

http://thedailywtf.com/Articles/The-Mythical-Business-Layer.aspx

الكائنات المستمرة في قاعدة البيانات ليست فكرة جيدة.إنه يقتل كل الأشياء الجيدة التي تم تصميم قاعدة البيانات للقيام بها.

يمكنك استخدام BinaryFormatter class لإجراء تسلسل للكائن الخاص بك إلى تنسيق ثنائي، ثم احفظ السلسلة الناتجة في قاعدة البيانات الخاصة بك.

سوف يقوم XmlSerializer أو DataContractSerializer في .net 3.x بالمهمة نيابةً عنك.

@aku وlomaxx وbdukes - حلولكم هي ما كنت أبحث عنه.

معلومات @1800 - بينما أقدر موقفك بشأن هذه المسألة، فهذه حالة خاصة من البيانات التي أحصل عليها من خدمة ويب يتم تحديثها مرة واحدة فقط في الشهر.لا أحتاج إلى استمرار البيانات في نموذج db لأن هذا هو الغرض من خدمة الويب.يوجد أدناه الرمز الذي بدأت العمل به أخيرًا.

تسلسل

    #'res is my object to serialize
    Dim xml_serializer As System.Xml.Serialization.XmlSerializer
    Dim string_writer As New System.IO.StringWriter()
    xml_serializer = New System.Xml.Serialization.XmlSerializer(res.GetType)
    xml_serializer.Serialize(string_writer, res)

إلغاء التسلسل

    #'string_writer and xml_serializer from above
    Dim serialization As String = string_writer.ToString
    Dim string_reader As System.IO.StringReader
    string_reader = New System.IO.StringReader(serialization)
    Dim res2 As testsedie.EligibilityResponse
    res2 = xml_serializer.Deserialize(string_reader)

ما تريد القيام به يسمى "تسلسل" الكائن الخاص بك، ولدى .Net عدة طرق مختلفة للقيام بذلك.أحدهما هو فئة XmlSerializer في مساحة الاسم System.Xml.Serialization.

آخر موجود في مساحة الاسم System.Runtime.Serialization.يحتوي هذا على دعم لمنسق SOAP، ومنسق ثنائي، وفئة أساسية يمكنك أن ترث منها، حيث تقوم جميعها بتنفيذ واجهة مشتركة.

بالنسبة لما تتحدث عنه، فإن BinaryFormatter المقترح سابقًا سيكون له على الأرجح أفضل أداء.

أنا أدعم @ 1800 معلومات حول هذا الأمر.
إن إجراء تسلسل للكائنات للتخزين طويل المدى ليس فكرة جيدة على الإطلاق

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

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

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

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

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