实体框架4.1-交换数据库

问题描述

| 从我阅读的所有内容来看,EntityFramework应该是蜜蜂的膝盖,您可以使用CodeFirst从POCO生成实体。太棒了!我已经完成了这一步,我让EntityFramework的认行为完成了它的工作,现在我被束之高阁。 我已经阅读了有关EntityFramework和MVC3应用程序的所有内容,您只需更改web.config中的DBContext连接字符串,它就可以自动检测,清除已缓存并重新生成的元数据,并调用认种子或自定义该上下文的种子方法。我不敢苟同。 我有一个非常简单的数据库上下文类:
namespace AwesomeApp.Models
{
    public class MyContext : DbContext
    {
        public DbSet<Sneeze> Sneeze { get; set; }
    }
}
在花了一些冲刺将模型安装到位,使用控制器和视图之后,我准备使用sqlServer Express 2008迁移到暂存环境。因此,我问google先生如何做到这一点,它公开声明在此博客文章中,您将连接字符串设置为实体上下文作为名称,其他所有内容都应放置到位。
<connectionStrings>
<add name=\"MyContext\"
     connectionString=\"Server=server;Database=awesome_sauce;User ID=noob;Password=noob;Trusted_Connection=False;\"
     providerName=\"System.Data.sqlClient\"/>
我称其为shenanigans,因为它没有在我列出的数据库中创建表,而仍在访问数据库。这给我留下了2个问题,我很确定这是我的无知 实体框架调用sql Server Express(或CE)数据库位于哪里? 更新连接时,程序员是否需要更多交互才能获得交换DB的行为?     

解决方法

        这是我使用SQLite DB动态更改路径的示例...对于任何SQL都可以采用相同的逻辑。我把它放在我的WPF应用程序的application.xaml中(所以问题放在了您的application_start中)
\' Application-level events,such as Startup,Exit,and DispatcherUnhandledException
\' can be handled in this file.

Public Sub New()

    \'Attempt to load the db file
    Dim dbFile As New IO.FileInfo(AppDomain.CurrentDomain.BaseDirectory & \"Files\\database.s3db\")

    \'Loop till we get liteEntities
    For Each item As System.Configuration.ConnectionStringSettings In ConfigurationManager.ConnectionStrings
        If item.Name <> \"liteEntities\" Then Continue For

        \'Allow us to update this ite
        Dim fi = GetType(ConfigurationElement).GetField(\"_bReadOnly\",BindingFlags.Instance Or BindingFlags.NonPublic)
        fi.SetValue(item,False)

        \'Update it
        item.ConnectionString = Replace(item.ConnectionString,\"C:\\db\\Files\\database.s3db\",dbFile.FullName)

    Next


End Sub
    ,        
// for a website:
[assembly: System.Web.PreApplicationStartMethod(typeof  (MyContextNS.MyContextInitializer),\"Application_Start\")]
// or just call MyContextNS.MyContext.Application_Start(); before using MyContext
namespace MyContextNS
{   
    public class MyContextInitializer 
        : DropCreateDatabaseAlways<MyContext>
        // : DropCreateDatabaseIfModelChanges<MyContext>
    {
        public static void Application_Start() {
            var initializer = new MyContextInitializer();
            Database.SetInitializer<MyContext>(initializer);
        }
        protected override void Seed(MyContext context) {
            base.Seed(context);
            // ... initialize
        }
    }
}