Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 将ASP.NET MVC应用程序与实体框架分离_Asp.net Mvc_Dependency Injection_Entity Framework 4.1_Separation Of Concerns - Fatal编程技术网

Asp.net mvc 将ASP.NET MVC应用程序与实体框架分离

Asp.net mvc 将ASP.NET MVC应用程序与实体框架分离,asp.net-mvc,dependency-injection,entity-framework-4.1,separation-of-concerns,Asp.net Mvc,Dependency Injection,Entity Framework 4.1,Separation Of Concerns,如果我有这个项目结构 Foo.数据 参考实体框架 富商 参考食品数据 Foo.Web 商务参考书 这难道不允许我阻止从Foo.Web添加对EntityFramework的引用吗 如何从我的global.asax.cs调用System.Data.Entity.Database.SetInitializer(),而不添加EntityFramework引用?否。如果Foo.Web需要EntityFramework中的类,它将不得不引用它。引用不会在项目之间级联。您可以做的是在Foo.B

如果我有这个项目结构

  • Foo.数据
    • 参考实体框架
  • 富商
    • 参考食品数据
  • Foo.Web
    • 商务参考书
这难道不允许我阻止从Foo.Web添加对EntityFramework的引用吗


如何从我的
global.asax.cs
调用
System.Data.Entity.Database.SetInitializer()
,而不添加EntityFramework引用?

否。如果Foo.Web需要EntityFramework中的类,它将不得不引用它。引用不会在项目之间级联。

您可以做的是在
Foo.Business
项目中创建一个
InitializeDatabase()
函数,该函数反过来调用
System.Data.Entity.Database.SetInitializer()
。然后,您可以从您的
Foo.Web
项目中调用
InitializeDatabase()
,该项目已经有了对
Foo.Business

的引用,您为什么要这样做

您这样做的原因是(我假设)使您能够在以后切换出数据层,而无需修改Web项目中的任何内容,并且在业务项目中尽可能少地进行修改。要实现这一点,您应该确保所有类都是针对接口工作的,而不是针对具体的实现


在您的示例中,您可能应该定义某种类型的
Repository
接口,其中包括
Initialize()
方法。然后创建一个类(可能是专门的DbContext)来实现接口,并针对该接口进行操作。在存储库上的
Initialize()
方法中,您可以调用
Database.SetInitializer()
,这样您就不必在web或业务项目中引用System.Data.Entity。

您能否详细说明它不起作用的原因/方式?你犯了什么错误?我算出来了。我打错了。这种方法奏效了。