我开始一个新的ASP.NET项目,我想跟着多项目的方法,我已经看到了周围的多个#1的问题提到 。
我一直在关注这个教程,但它假定只有一个为您的整个解决方案项目。 最值得注意的是,它建议修改你的Global.asax文件的代码来设置数据库初始化。
看到如何我DAL项目没有一个Global.asax文件,什么是播种初期EF数据库正确的程序?
我开始一个新的ASP.NET项目,我想跟着多项目的方法,我已经看到了周围的多个#1的问题提到 。
我一直在关注这个教程,但它假定只有一个为您的整个解决方案项目。 最值得注意的是,它建议修改你的Global.asax文件的代码来设置数据库初始化。
看到如何我DAL项目没有一个Global.asax文件,什么是播种初期EF数据库正确的程序?
我站在我的上述评论修正,你将不得不通过二级参考访问DAL。 如果你是真正想在你的web项目引用DAL保持,创建您的BLL一个引导程序的类,它的数据库的东西给你
这些例子从下面的博客文章被拉: http://weblogs.asp.net/rashid/archive/2009/02/17/use-bootstrapper-in-your-asp-net-mvc-application-and-reduce-代码smell.aspx
创建一个引导程序接口
public interface IBootstrapperTask
{
void Execute();
}
创建一个类,将处理您的数据库配置
public class InitializeDatabase : IBootstrapperTask
{
public void Execute()
{
Database.SetInitializer(new Configuration());
using (var db = new Context())
{
try
{
db.Database.Initialize(false);
}
catch (DataException ex)
{
}
catch (Exception ex)
{
throw;
}
}
}
}
创建一个静态类将执行的任务(你可以有多个,注册的路线可以移动到BootstrapperTask)
public static class Bootstrapper
{
static Bootstrapper()
{
ConfigureContainer();
}
public static void Run()
{
var tasks = ServiceLocator.Current.GetAllInstances<IBootstrapperTask>();
foreach(var task in tasks)
{
task.Execute();
}
}
private static void ConfigureContainer()
{
IUnityContainer container = new UnityContainer();
UnityConfigurationSection configuration = (UnityConfigurationSection) ConfigurationManager.GetSection("unity");
configuration.Containers.Default.Configure(container);
ServiceLocator.SetLocatorProvider(() => new UnityServiceLocator(container));
}
}
最后,你的Global.asax将有一个衬垫
protected void Application_Start()
{
Bootstrapper.Run();
}
有一些web.config中要做的事情,以及你将在博客中看到。 此外, 这个问题可以借上布置的细节一些更多的信息,等方面有更多的好处不仅仅是没有,以及对为什么使用这种模式是一件好事引用DAL与各地社区一些优秀的职位,以boostrapping在实施了几个不同的方法。
在Application_Start
在Global.asax的:
Database.SetInitializer(new Configuration());
using (var db = new Context())
{
try
{
db.Database.Initialize(false);
}
catch (DataException ex)
{
}
catch (Exception ex)
{
throw;
}
}
在上下文类生活在DAL:
public class Context : DbContext
{
public Context() : base("YourDatabaseName") { }
public DbSet<Employee> Employees { get; set; }
// ...
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new EmployeeMap());
你做的映射在专用类public class EmployeeMap : EntityTypeConfiguration<Employee>
。
播种在DAL完成:
public sealed class Configuration : DropCreateDatabaseAlways<Context>
{
protected override void Seed(Context context)
{
// Do your seeding here
}
}