1

ビジュアル ウェブ デベロッパー。エンティティ データ ソース モデル。新しいデータベースをうまく作成しています。SAMPLE1.MDF と SAMPLE1.LDF を作成する例 アプリを実行すると、別の SAMPLE1_LOG.lDF ファイルが作成されます。

createdatabase を実行するときに、ログ ファイルの _LOG.ldf を指定できる場所はありますか? SQL 2008 r2.

DeleteDatabase 関数を実行するとめちゃくちゃになる... 2 つのログ ファイル...

SAMPLE1_Log.ldf を探しているのであれば、最初にファイル SAMPLE1_Log.ldf を作成しないのはなぜですか...

お時間をいただきありがとうございます、フランク

     // database or initial catalog produce same results...

     // strip the .mdf off of newfile and see what happens?
     // nope. this did not do anything... still not create the ldf file correctly!!!
     // sample1.mdf, sample1.ldf... but when run, it creates sample1_log.LDF... 
     newfile = newfile.Substring(0, newfile.Length - 4);

     String mfile = "Initial Catalog=" + newfile + ";data source=";


     String connectionString = FT_EntityDataSource.ConnectionManager.GetConnectionString().Replace("data source=", mfile);

     // String mexclude = @"attachdbfilename=" + "|" + "DataDirectory" + "|" + @"\" + newfile + ";";
     // nope. must have attach to create the file in the app_data, otherwise if goes to documents & setting, etc sqlexpress.
     // connectionString = connectionString.Replace(mexclude, "");

     Labeldebug2.Text = connectionString;

     using (FTMAIN_DataEntities1 context = new FTMAIN_DataEntities1(connectionString))
     {
        //            try
        //            {
        if (context.DatabaseExists())
        {
           Buttoncreatedb.Enabled = false;
           box.Checked = true;
           boxcreatedate.Text = DateTime.Now.ToString();
           Session["zusermdf"] = Session["zusermdfsave"];
           return;
           // Make sure the database instance is closed.
           // context.DeleteDatabase();
           // i have entire diff section for deletedatabase.. not here. 
        }
        // View the database creation script.
        // Labeldebug.Text = Labeldebug.Text + "  script ==> " + context.CreateDatabaseScript().ToString().Trim();
        // Console.WriteLine(context.CreateDatabaseScript());
        // Create the new database instance based on the storage (SSDL) section 
        // of the .edmx file.

        context.CreateDatabaseScript();
        context.CreateDatabase();
    }

すべてのトライ、キャッチを取り出したので、何が起こるかを見ることができます...

================================================== ========================

ねじれを解決しながら大まかなコード..

作成する接続文字列

metadata=res://*/FT_EDS1.csdl|res://*/FT_EDS1.ssdl|res://*/FT_EDS1.msl;provider=System.Data.SqlClient;provider connection string="Initial Catalog=data_bac100; data source=.\SQLEXPRESS;attachdbfilename=|DataDirectory|\data_bac100.mdf;統合セキュリティ=True;ユーザー インスタンス=True;multipleactiveresultsets=True;App=EntityFramework"

この例では、作成するファイルは「data_bac100.mdf」です。data_bac100.mdf と data_bac100.ldf を作成します。

実際にこのファイルとテーブルを使用して実行すると、data_bac100_log.LDF が自動作成されます

1)ldfを作成しないようにしようとしていたため、システムが実行されると、すぐに単一のldfが作成されます...

2) 初期カタログおよび/またはデータベース キーワードは、createdatabase(). を実行するために接続文字列にのみ追加されます。Web 構成で作成された通常の接続文字列には、attachdbfilename のみが含まれ、正常に動作します。

無制限のデータベース用に 1 つの接続文字列があり、メイン データベースは web.config.式ビルダー、およびデータベースが操作するための正しい値で接続文字列を解析する関数を使用して正しく。これはすべてうまくいきます。

エンティティ フレームワークは、スクリプトを自動的に生成します。私は.mdf拡張子の有無にかかわらず試してみましたが、違いはありません...おそらく、ldfファイルの命名規則を保持するセットアップがどこかにあると思いました...

とにかくAPP_Dataフォルダーを使用していない場所に展開しようとすると、最終的にはこれらすべてが無駄になります...

アプリケーションを実行するときに作成される接続文字列の例を次に示します。 ;provider connection string="data source=.\SQLEXPRESS;attachdbfilename=|DataDirectory|\TDSLLC_Data.mdf;integrated security=True;user instance=True;multipleactiveresultsets=True;App=EntityFramework"

この場合、TDSLLCData.mdf ファイルを使用します...

2012/04/01... 続報... Entity Framework

機能 ObjectContext.CreateDatabase メソッドによって作成されたログ ファイル

変更 CreateDatabase メソッドが直接呼び出されるか、Code First を使用して SqlClient プロバイダーと接続文字列に AttachDBFilename 値を指定して呼び出されると、filename.ldf ではなく filename_log.ldf という名前のログ ファイルが作成されます (filename はファイルの名前です)。 AttachDBFilename 値によって指定されます)。

影響。この変更により、SQL Server の仕様に従って名前が付けられたログ ファイルが提供されるため、デバッグが改善されます。予期しない副作用があってはなりません。

http://msdn.microsoft.com/en-us/library/hh367887(v=vs.110).aspx

私は .net 4 (.net 4.5 ではない) を搭載した Windows XP を使用しています...もう少し探します..しかし、変更できない問題のようです。

2012 年 4 月 1 日、4:30... わかりました、より多くのハンティングと検索、および createdatabase と databaseexists で経験したいくつかの矛盾....net 4.5 では、.log だけでなく _log.ldf を追加することになっています。 ldf ファイルなので、何らかの理由でこれに対処したに違いありません....

同じ問題を抱えている他の人を見つけましたが、サーバーは異なります... MySQLにはEF4用のコネクタがあり、現在のバージョンは6.3.5で、その主な機能は正常に動作していますが、System.Dataなどのいくつかのメソッドにまだ問題があります。 Objects.ObjectContext.CreateDatabase() •System.Data.Objects.ObjectContext.DatabaseExists() により、モデル ファーストのアプローチを完全に使用することが困難になります。これは、MySQL スクリプト (CreateDatabaseScript メソッドで利用可能) を手動で編集することで可能です。MySQL チームは、これらのバグを解決することに熱心ではないようです。彼らの取り組みレベルが実際にどの程度なのかはわかりませんが、以前よりも確実に低下しています。そうは言っても、同じ方法は SQL CE でも失敗します (それらは実装されておらず、MS チームがすぐに取り組む可能性は低いと思います)。


以下のスペースが不足しています...データベースを作成するときに問題になり、_log.ldfファイルを作成せず、ldfファイルのみを作成し、データベースを使用して_log.ldfファイルを作成します.. . これで、2 つの ldf ファイルができました.. 1 つが無効になります.. データベースの操作が完了したら、それを削除してから、新しいファイルを作成しようとすると、ldf が存在しますが、機能しません....


これは EF4 の場合とまったく同じであることが判明し、EF4.5 ベータ版では、データベースの使用時に作成されるものと一致するように _log.ldf ファイルを作成するように変更されました。

時間をありがとう。

4

1 に答える 1

1

この「mdf 添付ファイル」機能を自分で使用したことはなく、よくわかりませんが、xcopy 展開ドキュメントによると、mdf を添付すると自動的にログ ファイルが作成されるため、自分でログ ファイルを作成しないでください。ドキュメントには命名についても言及されており、新しいログ ファイル名は _log.ldf で終わると書かれています。つまり、この動作は仕様によるものであり、変更することはできません。

おそらくもっと重要な質問は、なぜログ ファイルの名前を気にするのかということです。それは実際にあなたのアプリケーションに問題を引き起こしますか? もしそうなら、あなたはその問題の詳細を提供し、誰かが解決策を持っているかどうかを確認する必要があります.

于 2012-04-02T07:38:11.987 に答える