سؤال

أنا أستخدم DBLINQ و DBMETAL.EXE لتوليد LinQ-To-SQL فصول إيقاف قاعدة بيانات SQLite. في كل مرة أستخدم فيها DBMEDAL لتجديد DataContext الخاص بي، فإنه يولد فئة ل SQLite_Eneckence. المشكلة هي أن SQLITE_EATENENCENALN ليس طاولة مناسبة، وبالتالي فإن الفئة ليست كاملة.

السؤال هو، هل يمكن dbmetal.exe القيام بعمل أفضل لتوليد هذه الفئة، أو هل يمكنني إخبار DBMENTAL لتجاهل هذه الفئة؟

شكرا!

هنا دعوة dbmetal.exe

.\DbMetal.exe /namespace:Namespace /provider:SQLite "/conn:Data Source=Datasource.db" /code:CodeFile.cs 

إليك SQL SQL الناتج عن SQLITE_SICENORS (أي جدول نظام):

CREATE TABLE sqlite_sequence(name,seq)

إليك الفئة المكسورة التي يتم إنشاؤها (لاحظ الخصائص واسمها و SEQ، والتي لا تحتوي على أنواع البيانات. هذه هي المشكلة):

[Table(Name = "main.sqlite_sequence")]
public partial class SQLiteSequence : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    private  _name;
    [DebuggerNonUserCode]
    [Column(Storage = "_name", Name = "name", DbType = "")]
    public  Name
    {
        get
        {
            return _name;
        }
        set
        {
            if (value != _name)
            {
                _name = value;
                OnPropertyChanged("Name");
            }
        }
    }       

    private  _seq;
    [DebuggerNonUserCode]
    [Column(Storage = "_seq", Name = "seq", DbType = "")]
    public  SEQ
    {
        get
        {
            return _seq;
        }
        set
        {
            if (value != _seq)
            {
                _seq = value;
                OnPropertyChanged("SEQ");
            }
        }
    }

    public SQLiteSequence() {}
}
هل كانت مفيدة؟

المحلول

احسب طريقة. كانت عملية متعددة الخطوات، ولكن هناك طريقة للقيام بالضبط ما أردت.

أولا، قمت بإنشاء DBML من قاعدة البيانات الخاصة بي، باستخدام هذا الأمر:

.\DbMetal.exe /namespace:Namespace /provider:SQLite "/conn:Data Source=Datasource.db" /dbml:CodeFile.dbml

ثم قمت بتحرير DBML (أي ملف XML فقط، بالطبع) وإزالة العقدة ل SQLite_Sechealce.

أخيرا، قمت بإنشاء DBML.cs مع هذا الأمر:

.\DbMetal.exe /namespace:Namespace /provider:SQLite "/conn:Data Source=Datasource.db" /dbml CodeFile.dbml /code:CodeFile.dbml.cs

إذا كنت ترغب في إضافة جدول، أو أعمدة جديدة، فسوف يتعين علي تحرير ملف DBML، ولكن الآن لدي عنصر التحكم الذي أريده عبر DataContext الخاص بي!

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