首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EF迁移控制日志记录SQL

EF迁移控制日志记录SQL
EN

Stack Overflow用户
提问于 2018-03-06 05:31:11
回答 1查看 1.1K关注 0票数 4

我有一些用于创建数据库和应用迁移的代码:

代码语言:javascript
复制
public static (Server Server, string ConnectionString) InitializeServerAndDatabase(string databaseName, string defaultConnectionConnectionString, DbMigrationsConfiguration migrationsConfiguration)
{
    var sqlConnection = new SqlConnection(defaultConnectionConnectionString);
    var serverConnection = new ServerConnection(sqlConnection);
    var server = new Server(serverConnection);
    var database = new Database(server, databaseName);
    database.Create();

    // Build database with migrations and seed data
    var sqlConnectionStringBuilder = new SqlConnectionStringBuilder(defaultConnectionConnectionString);
    sqlConnectionStringBuilder.InitialCatalog = databaseName;
    var connectionString = sqlConnectionStringBuilder.ToString();
    migrationsConfiguration.TargetDatabase = new DbConnectionInfo(connectionString, "System.Data.SqlClient");
    var migrator = new DbMigrator(migrationsConfiguration);
    var logger = new MigratorLoggingDecorator(migrator, new MinimalMigrationLogger());
    logger.Update();

    // Set environment variable so the DbContext will establish a connection to the right database
    Environment.SetEnvironmentVariable("DefaultConnection", connectionString);

    return (server, connectionString);
}

因为运行迁移记录的SQL比我想要的要多得多,所以我尝试通过编写MinimalMigrationsLogger来最小化日志记录,上面的方法中使用了它:

代码语言:javascript
复制
public class MinimalMigrationLogger : MigrationsLogger
{
    public override void Info(string message)
    {
        // Ignore it; there's too much of it clogging up CI
    }

    public override void Verbose(string message)
    {
        // The SQL text and other info comes here
        // Ignore it; there's too much of it clogging up CI
    }

    public override void Warning(string message)
    {
        Console.WriteLine(message);
    }
}

但是,我仍然在我的日志中获取用于创建表和种子数据的SQL。为什么我的安装程序不能避免这种情况?如何更改它,使其不会记录表创建和种子数据SQL?

EN

回答 1

Stack Overflow用户

发布于 2018-03-09 21:22:12

尝试下面的完整示例,看看与您的示例有什么不同。

您所要做的就是在同一项目上创建迁移

代码语言:javascript
复制
using Microsoft.SqlServer.Management.Common;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;

namespace EntityFramework.ConsoleExample
{
    using Microsoft.SqlServer.Management.Smo;

    class Program
    {
        public static string ServerName = "localhost";
        public static string DbName = "EntityFramework.ConsoleExample.MyContenxt";
        public static string ConnectionString = @"Server=" + ServerName + "; Database=" + DbName + @";Integrated Security = True;MultipleActiveResultSets=true";

        static void Main(string[] args)
        {
            var conf = new EntityFramework.Console.Migrations.Configuration
            {
                MigrationsAssembly = typeof(Customer).Assembly
            };

            InitializeServerAndDatabase(DbName, ServerName, Program.ConnectionString, conf);
            System.Console.ReadLine();
        }

        public static void InitializeServerAndDatabase(string databaseName, string serverName, string defaultConnectionConnectionString, DbMigrationsConfiguration migrationsConfiguration)
        {
            ServerConnection sqlConnection = new ServerConnection(serverName);
            Server sqlServer = new Server(sqlConnection);
            Database newDB = new Database(sqlServer, databaseName);
            newDB.Create();

            migrationsConfiguration.TargetDatabase = new DbConnectionInfo(defaultConnectionConnectionString, "System.Data.SqlClient");
            var migrator = new DbMigrator(migrationsConfiguration);
            var logger = new MigratorLoggingDecorator(migrator, new MinimalMigrationLogger());

            logger.Update();
        }
    }

    public class Customer
    {
        public int CustomerId { get; set; }
        public int Age { get; set; }
        public string Name { get; set; }
        public string Name2 { get; set; }
        public string Name3 { get; set; }
    }

    public class MyContenxt : DbContext
    {
        public DbSet<Customer> Customers { get; set; }
    }

    public class MinimalMigrationLogger : MigrationsLogger
    {
        public override void Info(string message)
        {
            System.Console.WriteLine("Info::::" + message);
        }

        public override void Verbose(string message)
        {
            //System.Console.WriteLine("Verbose::::" + message);
        }

        public override void Warning(string message)
        {
            System.Console.WriteLine("Warning::::" + message);
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49119816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档