هل سيكون لدى ORM أي طريقة لتحديد أن عمود SQLite يحتوي على أوقات تاريخ أو منطقية؟

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

سؤال

لقد كنت أفكر في استخدام SQLite لمشروعي التالي ، لكنني قلق من أنه يبدو أنه يفتقر datetime و bit أنواع البيانات.

إذا استخدمت DBLINQ (أو بعض ORM آخر) لإنشاء فئات C# ، فهل سيتم "إزالة" أنواع البيانات من الخصائص؟ سوف يتم وضع بيانات تاريخ الوقت في خصائص النوع string أو double؟ هل سيتم وضع بيانات منطقية في خصائص النوع int?

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

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

المحلول

يتعرف SQLite نفسه على خمسة أنواع بيانات فقط: NULL, INTEGER, REAL, TEXT, ، و BLOB. لكنه يتيح لك إعلان أي اسم نوع تريده ، حتى تتمكن من الكتابة

CREATE TABLE SomeTable (
   TimeAdded DATETIME,
   SomeFlag  BOOLEAN
);

واجعل orm الخاص بك يفسر الأنواع بالطريقة التي تريدها.

لقد كتبت غلاف C ++ حول SQLite ، واتخذت النهج المختلفة لتمثيل جميع قيم قاعدة البيانات بنوع متغير. يوفر هذا المتغير تحويلات بين أنواع مختلفة ، لذلك SqlValue("2010-05-03 01:01:04").AsTimestamp() يعطي كائن الطابع الزمني المتوقع.

نصائح أخرى

أنا استخدم System.Data.Sqlite ومن أدوات التصميم في VS2008 ، فإنه يمنحني نوع بيانات DateTime و Bit. على الرغم من أنني لست فكرة كبيرة عن DBLINQ. ولكن يتم دعم أنواع بيانات DateTime و Bit بواسطة SQLLITE

ال System.Data.Sqlite يحتوي مزود ADO.NET على ملف sqlitemetadataCollectionNames الفصل الذي يسمح لك باسترداد مختلف بيانات التعريف حول الأعمدة في جدول معين.

ويتضمن خاصية "أنواع البيانات" التي تصف نوع بيانات "تلميح" (SQLite لا يفرض كتابة صارمة) لكل عمود. باستخدام هذا من شأنه أن يسمح لـ ORM بإجراء التحويل المطلوب إلى/من نوع C# المكافئ.

عملت على محول لـ SQLite في Zend Framework.

للحصول على بيانات التعريف وأنواع البيانات لجدول SQLite ، استخدمت PRAGMA TABLE_INFO( <tablename> ) وتوصل ناتجها.

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