在不使用LINQ或其他ORM的情况下使用Repository模式是否有意义?我在MONO中编写应用程序并使用MySQL,正在考虑使用repositoy模式,但无法处理IQueryable。我正在考虑在存储库中公开更多方法,以明确在数据库调用时将在db侧进行过滤。任何建议,如果这是对设计或任何其他设计理念的有效使用,而不是?没有LINQ或其他ORM的存储库模式?
3
A
回答
3
版本库与IQueryable完全没有关系。你在想的是Rob Conory .net 3.5采用的存储库模式,实际上它更像是数据代理模式。
存储库负责返回对象,并负责处理数据访问,以便应用程序的其余部分可以不知道它。
你可以看到Martin Fowlers网站
0
这是绝对有可能的一个非常高的水平的描述。但是您应该将查询移动到存储库网站并为每个类实施一个存储库。例如:
public abstract class GenericRepository : IRepository {
public virtual T Get<T>(Identity id) where T : PersistentDocument {
using (IDbConnection connection = GetConnection())
using(IDbCommand command = CreateGetCommand(id, connection)) {
using (IDataReader reader = command.ExecuteReader()) {
var mapper = DaHelper.GetMapper<T>();
return mapper.Map(reader);
}
}
}
protected virtual IDbCommand CreateGetCommand(Identity id, IDbConnection connection) {
IDbCommand command = connection.CreateCommand();
command.CommandText = String.Format("SELECT * FROM {0} e WHERE e.id = ?", TableName);
command.Parameters.Add(id.ToGuid());
return command;
}
protected abstract string TableName { get; }
}
public class UserRepository: GenericRepository<User>, IUserRepository
{
protected override string TableName { get { return "users"; } }
public User GetByEmail(string email)
{
using (IDbConnection connection = GetConnection())
using (IDbCommand command = connection.CreateCommand())
{
command.CommandText = String.Format("SELECT * FROM {0} e WHERE e.email = ?", TableName);
command.Parameters.Add(email);
using (var reader = command.ExecuteReader())
return DaHelper.GetMapper<T>().Map(reader);
}
}
}
0
当然。存储库只是linq使用的一种模式。您可以通过它提供您想要的任何类型的数据访问。我工作的一个项目使用处理强类型DataSet的存储库。
相关问题
- 1. 存储库模式和DAL没有存储库模式的DAL中的区别?
- 2. 与其他项目(.NET)共享我的存储库(存储库模式)?
- 3. 从没有存储库模式Silverlight OData
- 4. 存储库模式和Linq到sql
- 5. LINQ to SQL和存储库模式
- 6. 有或没有存储库的NHibernate
- 7. Enum,PList或其他存储?
- 8. 其中哪些是存储库模式?
- 9. 存储库模式继续 - 类方法或存储库方法?
- 10. sharpSVN连接到一些存储库和其他没有
- 11. 存储库模式 - POCO或IQueryable?
- 12. 存储库模式
- 13. Linq to SQL使用存储库模式:对象没有支持转换到SQL
- 14. DDD存储库对其他存储库的了解
- 15. 观察者模式或其他模式
- 16. 有没有办法克隆包括其远程存储库的git存储库?
- 17. 存储库模式 - 缓存
- 18. c#存储库模式:每个子类有一个存储库?
- 19. LINQ,存储库模式和数据库抽象
- 20. 存储库模式 - 可以存储库包含除核心以外的其他逻辑CRUD
- 21. 使用存储过程与Linq到Sql有其他参数
- 22. 存储库模式和存储过程
- 23. 存储用户消息的最佳方式:MySQL数据库或其他地方?
- 24. 一个是否通过存储库/服务/其他存储XML/CSV /其他
- 25. 一个使用存储库模式的Linq To SQL的DataContext
- 26. 阿帕奇ModRewrite模式没有存储
- 27. 有没有C库的存储库?
- 28. C#Linq-SQL:用于存储库模式的UpdateByID方法
- 29. Linq to SQL的存储库模式:多对多关系
- 30. 的LINQ to SQL存储库模式和字符串ID
你对所有这些都是正确的。我指的是Robs post,已经发布了所有的地方,只是想知道是否要在db中进行过滤,并返回这个模式的有效用法,尽管这并不理想。 – CSharpAtl 2009-01-15 13:27:33