Asp.net mvc ASP.NETMVC模式决策:如何设计?

Asp.net mvc ASP.NETMVC模式决策:如何设计?,asp.net-mvc,linq-to-sql,entity-framework,repository-pattern,models,Asp.net Mvc,Linq To Sql,Entity Framework,Repository Pattern,Models,这涉及一个具有非常通用数据库的企业应用程序,所有对象都使用数据库中的数据进行标识,并进行国际化/全球化/本地化 为存储库模式创建一个模型,然后为DB access LINQ2SQL或EF生成1:1的另一个模型,并将后者用作存储库模型数据访问层? 直接使用L2S/EF/NHibernate模型,将模型映射到DB并打开持久层? 当在双模型环境中直接使用L2S/EF模型时,这种双模型idea存储库模式是否会弹出问题,使动态可堆叠LINQ搜索查询成为可能 请告知。只要您在存储库中公开IQueryable

这涉及一个具有非常通用数据库的企业应用程序,所有对象都使用数据库中的数据进行标识,并进行国际化/全球化/本地化

为存储库模式创建一个模型,然后为DB access LINQ2SQL或EF生成1:1的另一个模型,并将后者用作存储库模型数据访问层? 直接使用L2S/EF/NHibernate模型,将模型映射到DB并打开持久层? 当在双模型环境中直接使用L2S/EF模型时,这种双模型idea存储库模式是否会弹出问题,使动态可堆叠LINQ搜索查询成为可能


请告知。

只要您在存储库中公开IQueryable对象,您就可以按照建议的方式堆叠查询

对于使用实体框架进行此操作,我会非常谨慎,因为您可能期望的方式不支持延迟加载。LINQtoSQL将毫无问题地处理延迟加载

有关实体框架中延迟加载的更多信息,请参阅:

查看


关于从存储库对象返回IQueryable,我认为这样做会使应用程序中的关注点得到适当的分离。我完全支持在数据访问层中使用IQueryable,但一旦您开始将对象作为IQueryable返回,您就可以为控制器和/或视图提供开始干预数据访问的机会。这甚至可能会对应用程序的可测试性产生负面影响。

我知道EF的优点和缺点,因为我一直在研究它并就此撰写文章。我在解决方案中提到了EF,其中EF将是业务逻辑的工作模型。在我看来,您应该为业务逻辑创建一个单独的层,除非EF有内置的钩子。因此,您认为我应该使用模型优先的方法为我的所有业务对象创建一个模型,然后使用EF designer生成一个新模型,并将业务模型类的两个方法链接起来e、 g.与Account和Accounts类以及EFAccount EF生成的实体匹配表TAccount类似,其中Accounts将具有返回Account的方法GetAccountint id,但在内部,它通过LINQ查询使用自动生成的EFAccount及其某些属性来构造Account?-我希望我在这里足够清楚,这样,理论上,我应该能够将帐户实现和它的方法实现分开,以用于不同的DAL,如EF、L2S、,NHib等。我可以编写一个特殊的提供程序类,为使用Account business object的业务对象接口和实现定义实际的类?我想我知道您正在尝试做什么。听起来很有趣。