将 EF7 放入库中
Put EF7 in a library
Julia Lerman 经常拆分她的解决方案,因此她在 class 库中拥有 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() { }
}
是的,对于所有重要的项目,您都应该走这条路,这样做非常适合 SOLID 和 DRY 原则。这样做不仅允许您按照您的建议从解决方案中的其他项目访问数据层,而且还为其他解决方案将来在需要时使用该库铺平了道路。
考虑到 MVC 6 太新了,我找不到任何 n 层应用程序的示例。然而,older versions still apply. At Microsoft Connect 2015 a couple of days ago, Scott Hanselman demoed a Health Clinic application that looked to have the data layer in a separate project. This post 的负责人指出,他们打算尽快在线提供该演示的代码。
在此期间,您可以自己尝试一下。创建一个包含 MVC 6 模板化项目的解决方案。然后为数据层创建一个新的 Class 库(包),并将 EntityFramework 引用从您的 MVC6 项目的 project.json 移动到数据项目的 project.json。如上所述移动 ModelCnt
,并从 MVC6 项目中引用数据项目。 ef
dnx 命令应该仍然可以直接通过您的 MVC6 项目使用,但是如果您也希望从那里访问它,您可以将 "ef": "EntityFramework.Commands"
粘贴到数据项目的 project.json 中。
Julia Lerman 经常拆分她的解决方案,因此她在 class 库中拥有 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() { }
}
是的,对于所有重要的项目,您都应该走这条路,这样做非常适合 SOLID 和 DRY 原则。这样做不仅允许您按照您的建议从解决方案中的其他项目访问数据层,而且还为其他解决方案将来在需要时使用该库铺平了道路。
考虑到 MVC 6 太新了,我找不到任何 n 层应用程序的示例。然而,older versions still apply. At Microsoft Connect 2015 a couple of days ago, Scott Hanselman demoed a Health Clinic application that looked to have the data layer in a separate project. This post 的负责人指出,他们打算尽快在线提供该演示的代码。
在此期间,您可以自己尝试一下。创建一个包含 MVC 6 模板化项目的解决方案。然后为数据层创建一个新的 Class 库(包),并将 EntityFramework 引用从您的 MVC6 项目的 project.json 移动到数据项目的 project.json。如上所述移动 ModelCnt
,并从 MVC6 项目中引用数据项目。 ef
dnx 命令应该仍然可以直接通过您的 MVC6 项目使用,但是如果您也希望从那里访问它,您可以将 "ef": "EntityFramework.Commands"
粘贴到数据项目的 project.json 中。