• sqlite EF6


    1.nuget包添加System.Data.SQLite

    2.dbcontext

     1    public class AirportBridContext : DbContext
     2     {
     3         public AirportBridContext() : base(new SQLiteConnection()
     4         {
     5             ConnectionString = new SQLiteConnectionStringBuilder()
     6             {
     7                 DataSource = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "C:/Users/Guo/Desktop/发票/sqlitestudio-3.3.3/SQLiteStudio/bird".Replace("/", "\")),
     8                 ForeignKeys = true
     9             }.ConnectionString
    10         }, true)
    11         { }
    12         protected override void OnModelCreating(DbModelBuilder modelBuilder)
    13         {
    14             //modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    15             base.OnModelCreating(modelBuilder);
    16         }
    17         protected override DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry, IDictionary<object, object> items)
    18         {
    19             return base.ValidateEntity(entityEntry, items);
    20         }
    21         public override int SaveChanges()
    22         {
    23             return base.SaveChanges();
    24         }
    25 
    26         protected override bool ShouldValidateEntity(DbEntityEntry entityEntry)
    27         {
    28             return base.ShouldValidateEntity(entityEntry);
    29         }
    30         public DbSet<WatchingBirdTasksModel> WatchingBirdTasks { get; set; }
    View Code

    3. 转换器 MigrationSqLiteGenerator

      1  public class MigrationSqLiteGenerator : MigrationSqlGenerator
      2     {
      3         #region Constantes
      4 
      5         private const string pstrDefaultDateTime = "yyyy-MM-dd hh:mm:ss";
      6         private const int pintDefaultStringMaxLength = 255;
      7         private const int pintDefaultPrecisaoNumerica = 10;
      8         private const byte pbytDefaultPrecisaoTempo = 7;
      9         private const byte pintDefaultEscala = 0;
     10         //private const string pstrNomeTabelaMigration = "__MigrationHistory"; 
     11 
     12         #endregion
     13 
     14         #region Instancias
     15 
     16         private DbProviderManifest pprovProviderManifest;
     17         private List<MigrationStatement> plstComandos;
     18         private bool pblnGerouPrimaryKey;
     19 
     20         #endregion
     21 
     22         #region Método de Geração sobrescrito de MigratioSqlGenerator
     23 
     24         public override IEnumerable<MigrationStatement> Generate(
     25             IEnumerable<MigrationOperation> lstOperacoesMigrations, string strManifestoProvider)
     26         {
     27             plstComandos = new List<MigrationStatement>();
     28 
     29             InicializaServicosProvider(strManifestoProvider);
     30             GeraComandos(lstOperacoesMigrations);
     31 
     32             return plstComandos;
     33         }
     34 
     35         #endregion
     36 
     37         #region Métodos de geração dos comandos
     38 
     39         protected virtual void Generate(CreateTableOperation opeCriacaoTabela)
     40         {
     41             // Preferencialmente não iremos gerar a tabela de dados do Migration
     42             if (opeCriacaoTabela.Name.Contains("MigrationHistory"))
     43                 return;
     44 
     45             using (var ltextWriter = TextWriter())
     46             {
     47                 GeraComandoCriacaoTabela(opeCriacaoTabela, ltextWriter);
     48 
     49                 ComandoSQL(ltextWriter);
     50             }
     51         }
     52 
     53         protected virtual void Generate(AddForeignKeyOperation opeChaveEstrangeira)
     54         {
     55             // Inicialmente não havera a criação de chave estrangeira
     56         }
     57 
     58         protected virtual void Generate(DropForeignKeyOperation dropForeignKeyOperation)
     59         {
     60             // Inicalmente não haverá a criação de chave estrangeira
     61         }
     62 
     63         protected virtual void Generate(CreateIndexOperation opeCriacaoIndex)
     64         {
     65             using (var ltextWriter = TextWriter())
     66             {
     67                 ltextWriter.Write("CREATE ");
     68 
     69                 if (opeCriacaoIndex.IsUnique)
     70                     ltextWriter.Write(" UNIQUE ");
     71 
     72                 ltextWriter.Write("INDEX ");
     73                 ltextWriter.Write(opeCriacaoIndex.Name);
     74                 ltextWriter.Write(" ON ");
     75                 ltextWriter.Write(RemoveDBO(opeCriacaoIndex.Table));
     76                 ltextWriter.Write("(");
     77 
     78                 for (int lintCount = 0; lintCount < opeCriacaoIndex.Columns.Count; lintCount++)
     79                 {
     80                     var lstrDadosColuna = opeCriacaoIndex.Columns[lintCount];
     81 
     82                     ltextWriter.Write(lstrDadosColuna);
     83 
     84                     if (lintCount < opeCriacaoIndex.Columns.Count - 1)
     85                         ltextWriter.WriteLine(",");
     86                 }
     87 
     88                 ltextWriter.Write(")");
     89 
     90                 ComandoSQL(ltextWriter);
     91             }
     92         }
     93 
     94         protected virtual void Generate(DropIndexOperation opeDropIndex)
     95         {
     96             using (var ltextWriter = TextWriter())
     97             {
     98                 ltextWriter.Write("DROP INDEX ");
     99                 ltextWriter.Write(opeDropIndex.Name);
    100 
    101                 ComandoSQL(ltextWriter);
    102             }
    103         }
    104 
    105         protected virtual void Generate(AddPrimaryKeyOperation opeAdicionaPrimaryKey)
    106         {
    107             using (var ltextWriter = TextWriter())
    108             {
    109                 ltextWriter.Write("ALTER TABLE ");
    110                 ltextWriter.Write(RemoveDBO(opeAdicionaPrimaryKey.Table));
    111                 ltextWriter.Write(" ADD CONSTRAINT ");
    112                 ltextWriter.Write(opeAdicionaPrimaryKey.Name);
    113                 ltextWriter.Write(" PRIMARY KEY ");
    114                 ltextWriter.Write("(");
    115 
    116                 for (int li = 0; li < opeAdicionaPrimaryKey.Columns.Count; li++)
    117                 {
    118                     var lstrDadosColuna = opeAdicionaPrimaryKey.Columns[li];
    119 
    120                     ltextWriter.Write(lstrDadosColuna);
    121 
    122                     if (li < opeAdicionaPrimaryKey.Columns.Count - 1)
    123                         ltextWriter.WriteLine(",");
    124                 }
    125 
    126                 ltextWriter.Write(")");
    127 
    128                 ComandoSQL(ltextWriter);
    129             }
    130         }
    131 
    132         protected virtual void Generate(DropPrimaryKeyOperation opeDropPrimaryKey)
    133         {
    134             using (var ltextWriter = TextWriter())
    135             {
    136                 ltextWriter.Write("ALTER TABLE ");
    137                 ltextWriter.Write(RemoveDBO(opeDropPrimaryKey.Table));
    138                 ltextWriter.Write(" DROP CONSTRAINT ");
    139                 ltextWriter.Write(opeDropPrimaryKey.Name);
    140 
    141                 ComandoSQL(ltextWriter);
    142             }
    143         }
    144 
    145         protected virtual void Generate(AddColumnOperation opeAdicionaColuna)
    146         {
    147             using (var ltextWriter = TextWriter())
    148             {
    149                 ltextWriter.Write("ALTER TABLE ");
    150                 ltextWriter.Write(RemoveDBO(opeAdicionaColuna.Table));
    151                 ltextWriter.Write(" ADD ");
    152 
    153                 var lcmColuna = opeAdicionaColuna.Column;
    154 
    155                 Generate(lcmColuna, ltextWriter, null);
    156 
    157                 if ((lcmColuna.IsNullable != null)
    158                     && !lcmColuna.IsNullable.Value
    159                     && (lcmColuna.DefaultValue == null)
    160                     && (string.IsNullOrWhiteSpace(lcmColuna.DefaultValueSql))
    161                     && !lcmColuna.IsIdentity
    162                     && !lcmColuna.IsTimestamp
    163                     && !lcmColuna.StoreType.Equals("rowversion", StringComparison.InvariantCultureIgnoreCase)
    164                     && !lcmColuna.StoreType.Equals("timestamp", StringComparison.InvariantCultureIgnoreCase))
    165                 {
    166                     ltextWriter.Write(" DEFAULT ");
    167 
    168                     if (lcmColuna.Type == PrimitiveTypeKind.DateTime)
    169                     {
    170                         ltextWriter.Write(Generate(DateTime.Parse("1900-01-01 00:00:00", CultureInfo.InvariantCulture)));
    171                     }
    172                     else
    173                     {
    174                         ltextWriter.Write(Generate((dynamic)lcmColuna.ClrDefaultValue));
    175                     }
    176                 }
    177 
    178                 ComandoSQL(ltextWriter);
    179             }
    180         }
    181 
    182         protected virtual void Generate(DropColumnOperation opeRemoveColuna)
    183         {
    184             using (var ltextWriter = TextWriter())
    185             {
    186                 ltextWriter.Write("ALTER TABLE ");
    187                 ltextWriter.Write(RemoveDBO(opeRemoveColuna.Table));
    188                 ltextWriter.Write(" DROP COLUMN ");
    189                 ltextWriter.Write(opeRemoveColuna.Name);
    190 
    191                 ComandoSQL(ltextWriter);
    192             }
    193         }
    194 
    195         protected virtual void Generate(AlterColumnOperation opeAlteraColuna)
    196         {
    197             var lcmColuna = opeAlteraColuna.Column;
    198 
    199             using (var ltextWriter = TextWriter())
    200             {
    201                 ltextWriter.Write("ALTER TABLE ");
    202                 ltextWriter.Write(RemoveDBO(opeAlteraColuna.Table));
    203                 ltextWriter.Write(" ALTER COLUMN ");
    204                 ltextWriter.Write(lcmColuna.Name);
    205                 ltextWriter.Write(" ");
    206                 ltextWriter.Write(ConstruirTipoColuna(lcmColuna));
    207 
    208                 if ((lcmColuna.IsNullable != null)
    209                     && !lcmColuna.IsNullable.Value)
    210                 {
    211                     ltextWriter.Write(" NOT NULL");
    212                 }
    213 
    214                 ComandoSQL(ltextWriter);
    215             }
    216 
    217             if ((lcmColuna.DefaultValue == null) && string.IsNullOrWhiteSpace(lcmColuna.DefaultValueSql))
    218                 return;
    219 
    220             using (var ltextWriter = TextWriter())
    221             {
    222                 ltextWriter.Write("ALTER TABLE ");
    223                 ltextWriter.Write(RemoveDBO(opeAlteraColuna.Table));
    224                 ltextWriter.Write(" ALTER COLUMN ");
    225                 ltextWriter.Write(lcmColuna.Name);
    226                 ltextWriter.Write(" DROP DEFAULT");
    227 
    228                 ComandoSQL(ltextWriter);
    229             }
    230 
    231             using (var ltextWriter = TextWriter())
    232             {
    233                 ltextWriter.Write("ALTER TABLE ");
    234                 ltextWriter.Write(RemoveDBO(opeAlteraColuna.Table));
    235                 ltextWriter.Write(" ALTER COLUMN ");
    236                 ltextWriter.Write(lcmColuna.Name);
    237                 ltextWriter.Write(" SET DEFAULT ");
    238                 ltextWriter.Write(
    239                     (lcmColuna.DefaultValue != null)
    240                         ? Generate((dynamic)lcmColuna.DefaultValue)
    241                         : lcmColuna.DefaultValueSql
    242                     );
    243 
    244                 ComandoSQL(ltextWriter);
    245             }
    246         }
    247 
    248         protected virtual void Generate(DropTableOperation opeDropTable)
    249         {
    250             using (var ltextWriter = TextWriter())
    251             {
    252                 ltextWriter.Write("DROP TABLE ");
    253                 ltextWriter.Write(RemoveDBO(opeDropTable.Name));
    254 
    255                 ComandoSQL(ltextWriter);
    256             }
    257         }
    258 
    259         protected virtual void Generate(SqlOperation opeSQL)
    260         {
    261             ComandoSQL(opeSQL.Sql, opeSQL.SuppressTransaction);
    262         }
    263 
    264         protected virtual void Generate(RenameColumnOperation opeRenomearColuna)
    265         {
    266             // Inicialmente não suportada
    267         }
    268 
    269         protected virtual void Generate(RenameTableOperation opeRenameTable)
    270         {
    271         }
    272 
    273         protected virtual void Generate(MoveTableOperation opeMoveTable)
    274         {
    275         }
    276 
    277         private void Generate(ColumnModel cmDadosColuna, IndentedTextWriter textWriter, PrimaryKeyOperation opePrimaryKey)
    278         {
    279             textWriter.Write(cmDadosColuna.Name);
    280             textWriter.Write(" ");
    281             bool lblnEhPrimaryKey = false;
    282 
    283             if (opePrimaryKey != null)
    284                 lblnEhPrimaryKey = opePrimaryKey.Columns.Contains(cmDadosColuna.Name);
    285 
    286 
    287             if (lblnEhPrimaryKey)
    288             {
    289                 if ((cmDadosColuna.Type == PrimitiveTypeKind.Int16) ||
    290                     (cmDadosColuna.Type == PrimitiveTypeKind.Int32))
    291                     textWriter.Write(" INTEGER ");
    292                 else
    293                     textWriter.Write(ConstruirTipoColuna(cmDadosColuna));
    294 
    295                 if (cmDadosColuna.IsIdentity)
    296                 {
    297                     textWriter.Write(" PRIMARY KEY AUTOINCREMENT ");
    298                     pblnGerouPrimaryKey = true;
    299                 }
    300             }
    301             else
    302             {
    303                 textWriter.Write(ConstruirTipoColuna(cmDadosColuna));
    304 
    305                 if ((cmDadosColuna.IsNullable != null)
    306                     && !cmDadosColuna.IsNullable.Value)
    307                 {
    308                     textWriter.Write(" NOT NULL");
    309                 }
    310 
    311                 if (cmDadosColuna.DefaultValue != null)
    312                 {
    313                     textWriter.Write(" DEFAULT ");
    314                     textWriter.Write(Generate((dynamic)cmDadosColuna.DefaultValue));
    315                 }
    316                 else if (!string.IsNullOrWhiteSpace(cmDadosColuna.DefaultValueSql))
    317                 {
    318                     textWriter.Write(" DEFAULT ");
    319                     textWriter.Write(cmDadosColuna.DefaultValueSql);
    320                 }
    321             }
    322         }
    323 
    324         protected virtual void Generate(HistoryOperation opeHistorico)
    325         {
    326             // Foi removido, pois atualmente não usaremos o Migration
    327             //using (var ltextWriter = TextWriter())
    328             //{
    329             //    if (opeHistorico is InsertHistoryOperation)
    330             //    {
    331             //        InsertHistoryOperation lhisOperacaoInsert = opeHistorico as InsertHistoryOperation;
    332             //        ltextWriter.Write(" INSERT INTO ");
    333             //        ltextWriter.Write(pstrNomeTabelaMigration);
    334             //        ltextWriter.Write(" ( MigrationId, Model, ProductVersion) VALUES ");
    335             //        ltextWriter.Write(string.Format(" ('{0}', {1}, '{2}')",
    336             //            lhisOperacaoInsert.MigrationId,
    337             //            Generate(lhisOperacaoInsert.Model), lhisOperacaoInsert.ProductVersion));
    338             //    }
    339             //    else if (opeHistorico is DeleteHistoryOperation)
    340             //    {
    341             //        DeleteHistoryOperation lhisOperacaoInsert = opeHistorico as DeleteHistoryOperation;
    342             //        ltextWriter.Write(" DELETE FROM ");
    343             //        ltextWriter.Write(pstrNomeTabelaMigration);
    344             //        ltextWriter.Write(string.Format(" WHERE MigrationId = '{0}'",
    345             //            lhisOperacaoInsert.MigrationId));
    346             //    }
    347 
    348             //    ComandoSQL(ltextWriter);
    349             //}
    350         }
    351 
    352         protected virtual string Generate(byte[] bytDefaultValue)
    353         {
    354             var lstrbHexString = new StringBuilder();
    355 
    356             foreach (var lbtByte in bytDefaultValue)
    357                 lstrbHexString.Append(lbtByte.ToString("X2", CultureInfo.InvariantCulture));
    358 
    359             return "x'" + lstrbHexString + "'";
    360         }
    361 
    362         protected virtual string Generate(bool blnDefaultValue)
    363         {
    364             return blnDefaultValue ? "1" : "0";
    365         }
    366 
    367         protected virtual string Generate(DateTime dtmDefaultValue)
    368         {
    369             return "'" + dtmDefaultValue.ToString(pstrDefaultDateTime, CultureInfo.InvariantCulture) + "'";
    370         }
    371 
    372         protected virtual string Generate(DateTimeOffset dtfDefaultValue)
    373         {
    374             return "'" + dtfDefaultValue.ToString(pstrDefaultDateTime, CultureInfo.InvariantCulture) + "'";
    375         }
    376 
    377         protected virtual string Generate(Guid guidDefaultValue)
    378         {
    379             return "'" + guidDefaultValue + "'";
    380         }
    381 
    382         protected virtual string Generate(string strDefaultValue)
    383         {
    384             return "'" + strDefaultValue + "'";
    385         }
    386 
    387         protected virtual string Generate(TimeSpan tsDefaultValue)
    388         {
    389             return "'" + tsDefaultValue + "'";
    390         }
    391 
    392         protected virtual string Generate(object objDefaultValue)
    393         {
    394             return string.Format(CultureInfo.InvariantCulture, "{0}", objDefaultValue);
    395         }
    396 
    397         #endregion
    398 
    399         #region Métodos auxiliares
    400 
    401         protected virtual string ConstruirTipoColuna(ColumnModel cmModeloColuna)
    402         {
    403             return cmModeloColuna.IsTimestamp ? "rowversion" : ConstruirTipoPropriedade(cmModeloColuna);
    404         }
    405 
    406         private string ConstruirTipoPropriedade(ColumnModel propModeloPropriedade)
    407         {
    408             var lstrOriginalStoreTypeName = propModeloPropriedade.StoreType;
    409 
    410             if (string.IsNullOrWhiteSpace(lstrOriginalStoreTypeName))
    411             {
    412                 var ltypeUsage = pprovProviderManifest.GetStoreType(propModeloPropriedade.TypeUsage).EdmType;
    413                 lstrOriginalStoreTypeName = ltypeUsage.Name;
    414             }
    415 
    416             var lstrStoreTypeName = lstrOriginalStoreTypeName;
    417 
    418             const string lstrSufixoMax = "(max)";
    419 
    420             if (lstrStoreTypeName.EndsWith(lstrSufixoMax, StringComparison.Ordinal))
    421                 lstrStoreTypeName = lstrStoreTypeName.Substring(0, lstrStoreTypeName.Length - lstrSufixoMax.Length) + lstrSufixoMax;
    422 
    423             switch (lstrOriginalStoreTypeName.ToLowerInvariant())
    424             {
    425                 case "decimal":
    426                 case "numeric":
    427                     lstrStoreTypeName += "(" + (propModeloPropriedade.Precision ?? pintDefaultPrecisaoNumerica)
    428                                      + ", " + (propModeloPropriedade.Scale ?? pintDefaultEscala) + ")";
    429                     break;
    430                 case "datetime":
    431                 case "time":
    432                     lstrStoreTypeName += "(" + (propModeloPropriedade.Precision ?? pbytDefaultPrecisaoTempo) + ")";
    433                     break;
    434                 case "blob":
    435                 case "varchar2":
    436                 case "varchar":
    437                 case "char":
    438                 case "nvarchar":
    439                 case "nvarchar2":
    440                     lstrStoreTypeName += "(" + (propModeloPropriedade.MaxLength ?? pintDefaultStringMaxLength) + ")";
    441                     break;
    442             }
    443 
    444             return lstrStoreTypeName;
    445         }
    446 
    447         protected void ComandoSQL(string strInstrucaoSQL, bool blnSuprimeTransacao = false)
    448         {
    449             plstComandos.Add(new MigrationStatement
    450             {
    451                 Sql = strInstrucaoSQL,
    452                 SuppressTransaction = blnSuprimeTransacao
    453             });
    454         }
    455 
    456         protected void ComandoSQL(IndentedTextWriter writer)
    457         {
    458             ComandoSQL(writer.InnerWriter.ToString());
    459         }
    460 
    461 
    462         protected static IndentedTextWriter TextWriter()
    463         {
    464             return new IndentedTextWriter(new StringWriter(CultureInfo.InvariantCulture));
    465         }
    466 
    467         private static string RemoveDBO(string strTexto)
    468         {
    469             return strTexto.Replace("dbo.", string.Empty);
    470         }
    471 
    472         private void GeraComandos(IEnumerable<MigrationOperation> lstOperacoesMigrations)
    473         {
    474             foreach (dynamic ldynOperacao in lstOperacoesMigrations)
    475                 Generate(ldynOperacao);
    476         }
    477 
    478 
    479         private void InicializaServicosProvider(string strManifestoProvider)
    480         {
    481             using (var lconConexao = CreateConnection())
    482             {
    483                 pprovProviderManifest = DbProviderServices
    484                     .GetProviderServices(lconConexao)
    485                     .GetProviderManifest(strManifestoProvider);
    486             }
    487         }
    488 
    489         protected virtual DbConnection CreateConnection()
    490         {
    491             return new SQLiteConnection();
    492         }
    493 
    494         private void GeraComandoCriacaoTabela(CreateTableOperation opeCriacaoTabela, IndentedTextWriter textWriter)
    495         {
    496 
    497             textWriter.WriteLine("CREATE TABLE " + RemoveDBO(opeCriacaoTabela.Name) + " (");
    498             textWriter.Indent++;
    499 
    500             for (int i = 0; i < opeCriacaoTabela.Columns.Count; i++)
    501             {
    502                 ColumnModel lcmDadosColuna = opeCriacaoTabela.Columns.ToList()[i];
    503                 Generate(lcmDadosColuna, textWriter, opeCriacaoTabela.PrimaryKey);
    504 
    505                 if (i < opeCriacaoTabela.Columns.Count - 1)
    506                     textWriter.WriteLine(",");
    507             }
    508 
    509             if ((opeCriacaoTabela.PrimaryKey != null) && !pblnGerouPrimaryKey)
    510             {
    511                 textWriter.WriteLine(",");
    512                 textWriter.Write("CONSTRAINT ");
    513                 textWriter.Write(RemoveDBO(opeCriacaoTabela.PrimaryKey.Name));
    514                 textWriter.Write(" PRIMARY KEY ");
    515                 textWriter.Write("(");
    516 
    517                 for (int li = 0; li < opeCriacaoTabela.PrimaryKey.Columns.Count; li++)
    518                 {
    519                     var lstrNomeColuna = opeCriacaoTabela.PrimaryKey.Columns[li];
    520 
    521                     textWriter.Write(lstrNomeColuna);
    522 
    523                     if (li < opeCriacaoTabela.PrimaryKey.Columns.Count - 1)
    524                         textWriter.WriteLine(",");
    525                 }
    526 
    527                 textWriter.WriteLine(")");
    528             }
    529             else
    530             {
    531                 textWriter.WriteLine();
    532             }
    533 
    534             textWriter.Indent--;
    535             textWriter.Write(")");
    536         }
    537 
    538         #endregion
    539 
    540     }
    View Code

    4.dbcontext配置 SQLiteConfiguration

    1  public class SQLiteConfiguration : DbConfiguration
    2     {
    3         public SQLiteConfiguration()
    4         {
    5             SetProviderFactory("System.Data.SQLite", SQLiteFactory.Instance);
    6             SetProviderFactory("System.Data.SQLite.EF6", SQLiteProviderFactory.Instance);
    7             SetProviderServices("System.Data.SQLite", (DbProviderServices)SQLiteProviderFactory.Instance.GetService(typeof(DbProviderServices)));
    8         }
    9     }
    View Code
  • 相关阅读:
    oracle启动的三步
    Solaris下vi的简单使用帮助
    Solaris下ftp配置(初稿待补充)
    soap笔记1
    Solaris 10 查看机器的网卡mac地址
    查看表空间名称与对应文件
    [转]Ubuntu10.04的网络配置
    [转]红帽企业版RHEL6使用Fedora13的yum源
    [转]linux忘记密码怎么办法
    [转]个人管理 - IT人士书籍推荐(已读)
  • 原文地址:https://www.cnblogs.com/guosier/p/14793391.html
Copyright © 2020-2023  润新知