将EF7放入库中

时间:2015-11-18 06:18:06

标签: entity-framework asp.net-core-mvc

Julia Lerman经常将她的解决方案分解,因此她在自己的类库中使用EF,然后可以通过控制台应用程序对其进行处理。 我也喜欢当EF与我的MVC项目分离时,但是这样做没有多少帮助。感觉EF7被认为只嵌入在MVC6中。

当我将我的解决方案拆分为EF7库,控制台应用程序和MVC6项目,然后想要启用迁移,我必须包含一个startup.cs(它不需要包含任何东西 - 只是存在)和带有连接字符串的project.json。如果我不这样做,我就无法运行命令:dnx ef add migration InitialDatabase

拆分EF和MVC是否仍然可以,还是我必须重新考虑我的逻辑?

获取灵感和评论 - 这是我的DBContext:

namespace Model
{
    public class ModelCnt : IdentityDbContext<ApplicationUser>
    {
        //Include Cofiguration so I can get connectionstring fram appsettings.json
        public IConfigurationRoot Configuration { get; set; }

        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            base.OnConfiguring(optionsBuilder);

            //Initialize configuration:
            Configuration = new ConfigurationBuilder().AddEnvironmentVariables().Build();

            //Add connectionstring saved within enviroment variable:
            optionsBuilder.UseSqlServer(Configuration["ConnectionString"]);
        }
    }
}
/// <summary>Is necesary for the Migration to work</summary>
public class Startup
{
    public void Configure() { }
}

1 个答案:

答案 0 :(得分:0)

是的,您应该沿着这条路线前往所有非平凡的项目,这样做非常适合SOLID和DRY校长。这样做不仅可以让您按照建议从解决方案中的其他项目访问数据层,而且还可以为将来使用该库的其他解决方案铺平道路。

考虑到MVC 6是如此新颖,我无法找到任何n层应用程序的例子。但是older versions的原则仍然适用。几天前,在Microsoft Connect 2015上,Scott Hanselman演示了一个 Health Clinic 应用程序,该应用程序希望将数据层放在一个单独的项目中。 This发布说明他们打算很快在网上获得该演示的代码。

与此同时,你可以试试自己。使用MVC 6模板化项目创建解决方案。然后为Data层创建一个新的类库(Package),并将EntityFramework引用从MVC6项目的project.json移动到Data项目的project.json。如上所述移动ModelCnt,并从MVC6项目引用Data项目。 ef dnx命令仍然可以通过MVC6项目直接使用,但是如果你想从那里访问它,你可以将"ef": "EntityFramework.Commands"粘贴到你的数据项目的project.json中。