1

视觉 Web 开发人员。实体数据源模型。我让它创建新的数据库很好。示例创建 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="Initial Catalog=data_bac100;数据源=.\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,所以当系统运行时,它只会立即创建一个 ...

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 文件...

2012 年 4 月 1 日... 跟进... 实体框架

由 ObjectContext.CreateDatabase 方法创建的功能日志文件

change 当 CreateDatabase 方法被直接调用或使用 Code First 与 SqlClient 提供程序和连接字符串中的 AttachDBFilename 值时,它会创建一个名为 filename_log.ldf 而不是 filename.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.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 文件以匹配使用数据库时创建的文件。

谢谢你的时间。

4

1 回答 1

1

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

也许一个更重要的问题是,你为什么关心日志文件叫什么?它真的会给您的应用程序带来任何问题吗?如果是这样,您应该提供该问题的详细信息,并查看是否有人有解决方案。

于 2012-04-02T07:38:11.987 回答