目前我正在使用MVC 4和实体框架代码构建第一个场景的Web应用程序。
在我的应用程序的主要结构中,我有一个Dbcontext(BlogDB)
来管理一些Blog
类。它工作正常,因为它创建了我在数据库中需要的所有表。然后我创建了一个区域来托管在线商店。我的想法是创建一个单独的DbContext
类(OnlineStoreDB
)来处理仅用于在线商店的类。
我的问题是,一旦OnlineStoreDB
被触发,实体框架不仅为OnlineStore
创建了表,而且还删除了旧表。
我的问题是:
代码:
public class BlogDB : DbContext
{
public BlogDB ()
: base("DBConnection")
{
Database.SetInitializer(new BlogInitializer());
}
public DbSet<Blog> Blogs { get; set; }
public DbSet<Author> Authors { get; set; }
public DbSet<Comment> Comments { get; set; }
}
public class OnlineStoreDB : DbContext
{
public OnlineStoreDB() :
base("DbConnection")
{
Database.SetInitializer(new OnlineStoreInitializer());
}
public DbSet<Order> Orders { get; set; }
public DbSet<Product> Products { get; set; }
public DbSet<User> Users { get; set; }
}
答案 0 :(得分:3)
Xavier,欢迎代码优先!
是的,代码优先是一种非常出色的方法。但是现在你已经赶上了。微软(或据我所知,除此之外)没有聪明的想法,他提出了一种平滑的方式来智能地改变表,而不会危及数据和可能的架构。
2年前,实施策略是放弃并重新构建数据库。这是无法忍受的,因为我们中的许多人没有SU访问权限,而且已经停止了。
为了我从代码中找到的所有优点,我首选DB。虽然数据无法轻易保存,但注释可以通过好友类进行。
微软已经提出了一些聪明的迁移策略。我强烈建议你阅读这两篇文章。代码项目第二名:
1)http://blogs.msdn.com/b/adonet/archive/2012/02/09/ef-4-3-code-based-migrations-walkthrough.aspx
2)http://www.codeproject.com/Articles/504720/EntityplusFrameworkplusCodeplusFirstplusMigrations
您是否决定继续使用Code-First,他们应该具有启发性。我听起来像一个评论家,但我在一个人的优势和另一个人的稳定性之间徘徊。
最后,我认为你不应该保留2个dbcontexts。您的POCO应该在一个上下文中合并。
答案 1 :(得分:1)
如果你想保持表没有改变,你需要在两个DBContexts中将初始化器设置为null,如果它们有子表集。
但是我没有看到你为一个数据库创建两个DBContexts的观点。你能清楚地将数据库中的两组表(域)分开吗?