0

EF 5.0でEFトレースユーティリティを使用しようとしています(コードファースト)。ただし、これはedmxファイルを必要とするオブジェクトコンテキストでのみ機能します。

http://code.msdn.microsoft.com/EFProviderWrappers

誰かが最初にDBContextでEFコードの回避策を持っていますか?

アナンド

4

1 に答える 1

1

サイトの Q&A セクションから、著者は Code First を使用するための次のコードを持っています。

DbContext で DbCommand コンストラクターのオーバーロードを使用します...

var context = new NorthwindContext(CreateConnectionWrapper(@"name=NorthwindContext"));

そして CreateConnectionWrapper メソッド:

private static DbConnection CreateConnectionWrapper(string nameOrConnectionString) {
    var providerInvariantName = "System.Data.SqlClient";
    var connectionString = nameOrConnectionString;
    //name=connectionName format
    var index = nameOrConnectionString.IndexOf('=');
    if (nameOrConnectionString.Substring(0, index).Trim()
        .Equals("name", StringComparison.OrdinalIgnoreCase))
    {
        nameOrConnectionString = nameOrConnectionString
            .Substring(index + 1).Trim();
    }
    //look up connection string name
    var connectionStringSetting =
        ConfigurationManager.ConnectionStrings[nameOrConnectionString];
    if (connectionStringSetting != null)
    {
        providerInvariantName = connectionStringSetting.ProviderName;
        connectionString = connectionStringSetting.ConnectionString;
    }
    //create the special connection string with the provider name in it
    var wrappedConnectionString = "wrappedProvider=" + 
        providerInvariantName + ";" + 
        connectionString;
    //create the tracing wrapper
    var connection = new EFTracingConnection
                            {
                                ConnectionString = wrappedConnectionString
                            };
    //hook up logging here
    connection.CommandFinished +=
        (sender, args) => Console.WriteLine(args.ToTraceString());
    return connection; }

これは TracingWrapper を実行するだけですが、同じ方法で Caching ラッパーをラップすることもできます。

于 2012-09-21T18:05:15.163 に答える