实体createdatabase ldf日志文件名更改默认如何

时间:2012-03-31 22:36:58

标签: sql-server-2008 entity-framework visual-web-developer-2010

Visual Web Developer。实体数据源模型。我有它创建新的数据库。例 创建SAMPLE1.MDF和SAMPLE1.LDF 当我运行我的应用程序时,它会创建另一个SAMPLE1_LOG.lDF文件。

当我运行createdatabase时,是否有可以为日志文件指定_LOG.ldf的地方? SQL 2008 r2。

当我运行DeleteDatabase函数... 2日志文件...

时,它会混乱

为什么它不会创建文件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 =&#34 ; Initial Catalog = data_bac100; data source =。\ SQLEXPRESS; attachdbfilename = | DataDirectory | \ data_bac100.mdf; integrated security = True; user instance = True; multipleactiveresultsets = True; App = EntityFramework"

在此示例中,要创建的文件是" data_bac100.mdf"。 它创建data_bac100.mdf和data_bac100.ldf

当我实际使用此文件和表格运行时,它会自动创建data_bac100_log.LDF

1)试图不创建ldf,所以当系统运行时,它只是创建了一个单独的... ...

2)初始目录和/或数据库关键字仅添加到连接字符串中以运行createdatabase()..在Web配置中创建的常规连接字符串只有attachdbfilename的东西,并且工作正常。

我有1个连接字符串用于无限数据库,主数据库在web.config中..我使用基于用户角色的初始化部分,无论是访问者,成员,管理员,匿名还是未经过身份验证...使用表达式构建器正确设置数据库,并使用函数来解析连接字符串,并使用正确的值来操作数据库。这一切都很好。

实体框架自动生成脚本。我已尝试使用和不使用.mdf扩展,没有任何区别...想想可能有一个设置某处保存ldf文件的命名约定...

最后,当开始尝试部署不使用APP_Data文件夹的地方时,所有这些都是徒劳的......

以下是运行应用程序时创建的连接字符串示例 metadata = res://*/FT_EDS1.csdl | res://*/FT_EDS1.ssdl | res://*/FT_EDS1.msl; provider = System.Data.SqlClient; provider connection string =" data source =。\ SQLEXPRESS; attachdbfilename = | DataDirectory | \ TDSLLC_Data.mdf; integrated security = True; user instance = True; multipleactiveresultsets = True; App = EntityFramework"

在这种情况下,请使用TDSLLCData.mdf文件...

04/01/2012 ...跟进...... 实体框架

特征 由ObjectContext.CreateDatabase方法

创建的日志文件

变化 当直接调用CreateDatabase方法或使用SqlClient提供程序的Code First和连接字符串中的AttachDBFilename值调用CreateDatabase方法时,它会创建一个名为filename_log.ldf而不是filename.ldf的日志文件(其中filename是指定文件的名称)通过AttachDBFilename值)。

影响。 此更改通过提供根据SQL Server规范命名的日志文件来改进调试。它应该没有意想不到的副作用。

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

我使用的是带有.net 4的Windows XP(不是.net 4.5)...会搜索更多...但看起来像是一个无法更改的问题。

2012年4月1日,4:30 ...... 好吧,更多的搜索和搜索以及我在创建数据库和数据库存在方面遇到的一些不一致...所以.net 4.5应该添加_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文件..一个变得无效..然后当完成数据库,删除它,然后尝试创建一个新的,一个ldf存在,它将无法工作....


事实证明这就是它与EF4一样的方式,并且它们随着EF4.5 beta而改变,以创建_log.ldf文件以匹配使用数据库时创建的文件。

谢谢你的时间。

1 个答案:

答案 0 :(得分:1)

我自己从未使用过这个“mdf附件”功能,但我对此并不了解,但根据xcopy deployment documentation,你不应该自己创建一个日志文件,因为它会在以后自动创建你附上了mdf。文档还提到了命名并说新的日志文件名以_log.ldf结尾。换句话说,此行为似乎是设计使然,您无法更改它。

也许更重要的问题是,为什么要关心日志文件的调用?它确实会导致您的应用程序出现任何问题吗?如果是这样,您应该提供该问题的详细信息,看看是否有人有解决方案。