我在实现存储库接口(interface)的两个不同模型中有两个数据集合。其中之一是一个平面列表,非常适合Repository模型。另一个数据模型采用树结构格式,我构建的存储库接口(interface)的实现看起来非常可疑。我可以尝试扁平化第二个数据模型并仅使用对父级的引用,但目前该应用程序从能够将数据作为树结构获取有一些很大的好处。我想知道是否有人有任何使用树结构数据模型实现存储库模式的经验。目前在我的Get(Funcpredicate)方法我使用递归方法展平列表并使用LINQ查询返回对象,但我觉得这种实现有点太昂贵了。任何关于如何实现这一点的提示都将不胜感激。这里是getbypred
我正在尝试为我的EntityFramework存储库创建一个非常通用的泛型存储库,它具有基本的CRUD语句并使用接口(interface)。我先撞到了砖墙头,然后被撞倒了。这是我的代码,使用EntityFramework模型在控制台应用程序中编写,带有一个名为Hurl的表。简单地尝试通过其ID拉回对象。这是完整的应用程序代码。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Data.Objects;usingSystem.Linq.Expressions;
目前我们已经在工作中实现了一个存储库模式。我们所有的存储库都位于它们自己的接口(interface)后面,并通过Ninject进行映射。我们的项目非常大,我试图解决的这个模式有几个怪癖。首先,在某些Controller中,我们需要将10到15个存储库都放在同一个Controller中。当请求如此多的存储库时,构造函数变得相当丑陋。在您调用多个存储库上的方法后,第二个怪癖就会显现出来。在处理多个存储库后,我们需要调用SaveChanges方法,但是我们应该在哪个存储库上调用它呢?每个存储库都有一个。所有存储库都注入(inject)了相同的EntityFramework数据上下文实例,因此
在ASP.NETMVC应用程序中使用静态存储库的优缺点是什么?让所有方法始终可用不是更好吗->意味着类只被实例化一次,而不是让多个Controller引用同一个存储库类及其方法?还是我在这里弄错了什么?非常感谢所有帮助! 最佳答案 优点:存储库随处可见缺点:存储库不实现合约,这导致存储库的消费者与实现之间存在强耦合无法进行单元测试可能会遇到线程问题备注:在每个请求上实例化存储库不应被视为性能问题。 关于c#-在ASP.NETMVC应用程序中使用静态存储库的优缺点,我们在StackOver
我有几个几乎永远不会改变的实体(即国家、地区等的列表)这让我开始思考......除了正常的存储库之外,静态存储库对这些实体是否有意义?我另外说,因为这些实体仍将与其他实体交互,我仍然希望它们在一个单一的工作单元下,以便它们共享相同的上下文。不过,我确信有更好的方法来解决这个问题。我是ASP.NET和.NETFramework的新手,但是有没有一种方法可以定义将在程序的整个生命周期中使用的应用程序范围的数据?这是解决问题的最佳方法吗?还是只定义一个包含这些实体集合的静态类更好,我可以在需要时从那里获取它们? 最佳答案 您可以使用各种存
我们编写了一个通用函数,以存储库模式首先从EF代码中获取记录。休息似乎没问题,但是当将整数传递给动态订单时,它说CannotcastSystem.Int32toSystem.Object表达式如下:Expression>orderByFunc=o=>o.Id;if(options.sort=="Id"){//thisisanIntegerorderByFunc=o=>o.Id;}if(options.sort=="Name"){//stringorderByFunc=o=>o.Name;}if(options.sort=="Code"){orderByFunc=o=>o.Code;}泛
假设我有一个名为User的实体,它有很多帖子。对于删除帖子,我的服务如下所示:voidDeletePost(intpostId,intuserId);我的验证码去哪儿了?(确保用户有删除权限)。我应该在存储库中使用1个数据库调用来执行此操作吗?或者我应该在我进行2次调用的服务层中执行此检查:通过userId获取用户。在对用户完成验证后调用delete。我将有2个存储库,1个用于用户,1个用于帖子,每个都如下所示://FromthePostRepository.voidDelete(intpostId);//MayhavetoaddauserIdparamifIdovalidationi
我试图弄清楚哪一层应该负责域驱动设计项目中的缓存(插入/删除)工作。目标是通过缓存从存储库检索到的任何实体来提高Web应用程序的性能。我的解决方案如下:MyApp.InfrastractureMyApp.RepositoriesMyApp.DomainMyApp.WebApplication我觉得既然只有Web应用程序使用缓存,那么缓存逻辑应该放在这一层吗?然而,这感觉不正确,因为我想保持Web应用程序的轻量级并专注于提供网页。缓存也不是一流的领域概念,因此不适合领域层。怎么办? 最佳答案 这是以上所有问题的关注点。缓存是其中一个横
我正在查看ASP.NETMVC应用程序的repository方法,并注意到未使用static类。既然repo是CRUD,为什么不让它成为static? 最佳答案 1)很难用静态类进行单元测试(如果你正在测试一个依赖于你的存储库的类,你希望该测试针对一个假的“模拟”存储库对象而不是你的真实对象)2)您通常希望每个请求有1个存储库实例,以便更轻松地确保来自一个用户的未提交更改不会对另一个用户造成困惑。 关于c#-为什么数据存储库不是静态的?,我们在StackOverflow上找到一个类似的问
使用LINQTOSQL作为基于存储库的解决方案的基础。我的实现如下:IRepositoryFindAllFindByIDInsertUpdateDelete然后我有用于查询结果的扩展方法:WhereSomethingEqualsTrue()...我的问题如下:我的用户存储库有N个角色。我是否创建角色存储库来管理角色?我担心如果我走这条路,我最终会创建几十个存储库(每个表几乎1个,除了Join表)。每个表的存储库是否常见? 最佳答案 如果你正在构建你的存储库以特定于一个实体(表),这样每个实体都有你上面列出的IRepository接口