Asp.net mvc 如何在ASP.NET MVC应用程序中使用不同的实体框架DbContext?
目前,我正在使用MVC4和实体框架代码构建一个web应用程序 在我的应用程序的主结构中,我有一个Asp.net mvc 如何在ASP.NET MVC应用程序中使用不同的实体框架DbContext?,asp.net-mvc,entity-framework,asp.net-mvc-4,ef-code-first,asp.net-mvc-areas,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,Ef Code First,Asp.net Mvc Areas,目前,我正在使用MVC4和实体框架代码构建一个web应用程序 在我的应用程序的主结构中,我有一个Dbcontext(BlogDB)来管理一些Blog类。它工作正常,因为它在数据库中创建了我需要的所有表。然后我创建了一个区域来托管一个在线商店。我的想法是创建一个单独的DbContext类(OnlineStoreDB)来处理仅用于在线商店的类 我的问题是,一旦启动了OnlineStoreDB,实体框架不仅为OnlineStore创建了表,而且还删除了旧表 我的问题是: 如果你知道保留旧桌子的方法 如
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; }
}
公共类BlogDB:DbContext
{
公共博客数据库()
:base(“DBConnection”)
{
SetInitializer(新的BlogInitializer());
}
公共数据库集博客{get;set;}
公共数据库集作者{get;set;}
公共DbSet注释{get;set;}
}
公共类OnlineStoreDB:DbContext
{
公共OnlineStoreDB():
基本(“数据库连接”)
{
SetInitializer(新的OnlineStoreInitializer());
}
公共数据库集命令{get;set;}
公共数据库集产品{get;set;}
公共数据库集用户{get;set;}
}
如果要保持表不更改,则需要在两个DBContext中都将initializer设置为null(如果它们都有表的子集)
但我认为没有必要为一个数据库创建两个DBContext。您能清楚地将数据库中的两组表(域)分开吗?Xavier,欢迎先使用代码 是的,代码优先是一种很好的方法,它承诺了很多。但现在你已经成功了。微软(或据我所知,微软以外的公司)没有一个聪明的头脑能够想出一种平滑的方法来智能地修改表,而不会危及数据和可能的模式 2年前,实施策略是放弃并重建DB。这是无法忍受的,因为我们中的许多人没有SU访问权限,并且被挡在了我们的轨道上 对于我从代码优先中发现的所有优点,我更喜欢DB优先。虽然数据不容易保存,但注释可以通过伙伴类进行保存 微软提出了一些聪明的迁移策略。我强烈建议你读这两篇文章。代码项目2: (一) (二) 无论您是否决定首先继续使用代码,它们都应该是有启发性的。我听起来像个批评家,但我在一个优点和另一个稳定性之间左右为难
最后,我认为不应该保留2个DBContext。您的POCO应整合在1个上下文中。首先编码将是一项挑战。但你为什么要这样做呢?你不能在一个上下文中创建所有POCO吗?如果不是,我建议使用factory对象。祝你好运我也是一个老学究,更喜欢先设计数据库模式。谢谢Dave,我觉得先编写代码有时会让人头疼。我做了迁移,这就是为什么BlogDB的旧表不见了。您是对的,我只能通过从sql server中删除整个数据库并再次运行应用程序来解决问题。将首先切换到DB。祝你好运Xavier!我经历了完全相同的过程,结果糟透了。如果你还没有,请阅读好友课程。在POCOs上保留数据注释的聪明方法,尽管需要不断地重建。@DaveA您有一些使用buddy类的好例子吗?thanks@Xavier,这篇文章底部附近就是一个例子。你好,Jayantha,我在一个DBContext中整合了所有数据库集,从sql server中删除了数据库,重新运行了应用程序,它只能正常工作。但是,您知道在一个项目中处理两个DBContext的示例吗?