是否可以使用EF6 Code First和MVC5将涉及ASP.Identity的所有模型,视图和控制器放入其自己的类库项目中。那么在多个Web应用程序中,您可以使用相同的DLL并且已经拥有所有视图/控制器/模型,并且为多个应用程序使用相同的安全数据库?
我们有几个带有单独数据库的Web应用程序和一个处理所有这些数据库的安全数据库,我们现在还不确定如何保留此模型,因为我们正在转向EF6 Code First和MVC5。 / p>
如果有可能,有人可以指点我的类似教程,或者给我一个基本的步骤大纲?
或者,如果有更好的方法来实现我的目标,有一组代码来处理ASP.NET身份安全性,我可以将该DLL插入多个Web应用程序并获得相同的逻辑和数据库?
或者这一般不是一个好主意吗?
非常乐于接受建议和建议。我很感激。
答案 0 :(得分:3)
是的。我们对每个项目都这样做。结构非常简单。只需为您的解决方案创建一个类库项目,将EF添加到项目中,然后从主项目中引用类库。
如果使用Code First Migrations,请确保在运行迁移或添加迁移时选择类库项目作为Package Manager控制台中的默认项目。
以下是解决方案的伪解决方案
MySolution
- MyWebApp
reference: MyDAL
-MyDAL
reference: EF6
我发现这样做的好处是你可以参考" DAL"类库来自配套控制台应用程序或Windows窗体应用程序,或配套网站,即使在不同的解决方案中,它们也将使用相同的代码库。
例如:
MySolution
- MyWebApp
reference: MyDAL
- MyDAL
reference: EF6
- MyOtherWebApp
reference: MyDAL
注意:您的数据上下文将在 startup 项目的Web.config或App.config中查找其连接字符串。 不 类库。起初这可能令人困惑......但是一旦你想到.NET如何将应用程序一起编译到最终的包中,它就有意义了。
答案 1 :(得分:2)
如果您正在讨论为多个项目之间共享的整个数据层创建一个类库,那么这很容易。您可以将所有模型,上下文等移动到类库中,并使用类库项目运行迁移。其他项目只会引用该类库,而不是自己的迁移。
但是,如果您正在谈论多个数据库和关联数据层,其中项目Foo有自己的模型,上下文和迁移以及项目Bar有自己的模型,上下文和迁移,而类库只有{{ 1}}和IdentityUser
,事情变得复杂一些。您将无法组合任何这些上下文。因此,在您的Foo项目中,如果需要同时使用两者,则必须为Foo 和身份上下文实例化上下文。这本身并不是问题,但需要注意的是。