从我读过的所有内容来看,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迁移到临时环境。所以我问谷歌先生如何做到这一点,以及它在这篇博客文章中明确指出,您将连接字符串设置为实体上下文作为名称,其他所有内容都应该落实到位。
<connectionStrings>
<add name="MyContext"
connectionString="Server=server;Database=awesome_sauce;User ID=noob;Password=noob;Trusted_Connection=False;"
providerName="System.Data.SqlClient"/>
我称之为shenanigans,因为它没有在我列出的数据库中创建表,仍然访问默认数据库。这给我留下了两个问题,而且我从无知中得到了积极的支持
答案 0 :(得分:1)
这是一个使用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
答案 1 :(得分:1)
// 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
}
}
}