Tag: 数据访问层

如何在数据访问层中管理SqlDataReaders?

我试图更好地解决我的代码,代码重用等问题。 每次我想阅读一些行时,我都厌倦了输入以下内容: using(SqlConnection conn = new SqlConnection(myConnString)) { using(SqlCommand cmd = new SqlCommand(cmdTxt, conn)) { conn.Open(); using(SqlDataReader rdr = cmd.ExecuteReader()) { while(rdr.Read()) { /* do something with rows */ } } } } 我知道有LINQ to SQL(我不喜欢它),以及entity framework(还是个孩子)。 我没有问题必须输出我的查询,我只是不想每次都要输入命令contruction,row iterator等。 我环顾四周,发现了一些我觉得适合我的东西,并试图实现它以使我更容易。 正如您在注释中看到的,我收到SqlDataReader关闭的错误。 我猜它可能是因为DataFactory.ExecuteReader()方法中的using语句。 返回阅读器时,将在我的SqlConnection和SqlCommand变量上调用dispose方法。 我在那儿吗? 如果是这样,应该如何管理连接和命令变量? 编辑:我更新了我的代码示例,以更好地反映我正在做的事情。 public class DataFactory { public DataFactory() {} public DataFactory(string […]

存储过程中的企业库缓存参数?

我正在尝试与同事一起标准化一些数据访问代码。 上述同事之一断言,EntLib数据访问块试图在存储的proc调用上缓存参数。 我看过reflection器,有一些证据表明它可以缓存它们。 但我不认为它会在以下情况下发生。 public Dictionary GetQueue(int maxItems) { var sq = new SqlDatabase(_connString.ConnectionString); var result = new Dictionary(); using (var cmd = (SqlCommand)sq.GetStoredProcCommand(“dbo.GetQueue”)) { sq.AddInParameter(cmd, “maxItems”, DbType.Int32, maxItems); var reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); while (reader.Read()) { long id = reader.GetInt64(reader.GetOrdinal(“id”)); string fileName = reader.GetString(reader.GetOrdinal(“meta_data_filename”)); result.Add(id, fileName); } } return result; } 任何人都可以确认或否认这个吗? 我正在使用EntLib 4.1

使用DTO和BO

关于DTO / BO的一个问题是关于何时通过/返回DTO以及何时通过/返回BO。 我的直觉反应告诉我总是将NHibernate映射到DTO而不是BO,并且总是传递/返回DTO。 然后,每当我需要执行业务逻辑时,我都会将我的DTO转换为BO。 我这样做的方式是我的BO将有一个构造函数,它接受一个参数,该参数是我的DTO和BO实现的唯一参数的接口类型(定义了必需的字段/属性)。 然后我可以通过在构造函数中传递DTO来创建我的BO(因为两者都实现了相同的接口,它们都具有相同的属性)然后能够使用该BO执行我的业务逻辑。 然后我还可以将BO转换为DTO。 但是,我还看到人们似乎只与BO一起工作,并且只在后台使用DTO进行用户,看起来没有DTO。 这种架构与使用BO相比有什么好处/下降? 我应该总是传递/返回DTO或BOs或混合和匹配(似乎混合和匹配可能会让人困惑)?

演示文稿,业务和数据层

我刚刚开始使用C#进行编程,并且正在阅读将应用程序/网站划分为三个不同层次的文章,这是最佳实践,但我很难理解具体方法。 我正致力于一个宠物项目,更多地关注C#,但我不想从任何坏习惯开始。 你能看看我有什么,看看我做得对吗? 提供一些关于如何将所有内容分解为不同层次的提示建议? 表达层 Project: Ruth ” class=”lnk”>Link <asp:SqlDataSource ID="sdsLibrary" runat="server" ConnectionString="” DeleteCommand=”DELETE FROM [Library] WHERE [lib_id] = @lib_id” InsertCommand=”INSERT INTO [Library] ([artist_name], [album_title], [song_title], [file_path]) VALUES (@artist_name, @album_title, @song_title, @file_path)” ProviderName=”” SelectCommand=”SELECT [lib_id], [artist_name], [album_title], [song_title], [file_path] FROM [Library] ORDER BY [artist_name], [album_title]” UpdateCommand=”UPDATE [Library] SET [artist_name] = @artist_name, [album_title] = @album_title, [song_title] […]

DAL和BLL应该通过的类型

只是一个简单的问题。 在具有业务逻辑层(BLL)和数据访问层(DAL)的分层体系结构环境中,DAL应该将哪些类型传递给BLL? 目前,我们的DAL类生成DataTables和SQlDataReader对象(以及其他常见数据类型)。 是否应该在传递给BLL之前在DAL中完成对象到我们的自定义类型的转换,或者DAL是否应该传递原始类型并且BLL进行转换? 我正在考虑将来可能会替换另一种技术的DAL层的情况。 在那种情况下,听起来BLL应该期望转换数据类型,以便在进行切换时我们只需要确保我们的对象被返回? 任何明确的这个或阅读材料清理的东西都会有所帮助! TIA

unit testing数据访问层的方法

我一直试图寻找一种有效的方法来在C#中对我的数据访问层进行unit testing。 我是主要的Java开发人员,并且只使用了C#大约6个月,过去我使用了一个名为DBUnit的库来测试已知的状态数据库。 我无法找到一个可以使用的类似活动库,最近似乎是nDBUnit但它现在已经有一段时间没有活动了。 关于C#中的方式和原因似乎存在很多相互矛盾的方法。 理想情况下,我想使用模拟测试数据访问层,而无需连接到数据库,然后在一组单独的测试中对存储过程进行unit testing。 在我正在研究的系统中,数据访问层是使用ADO.net(不使用entity framework)在SQL Server上调用存储过程。 以下是我必须使用的示例代码; 沿着模拟路径,我必须能够模拟SqlCommand(使用IDbCommand)和/或模拟SqlConnection。 所以我的问题是什么似乎是最好的方式(如果有这样的事情)这样做? 到目前为止,唯一的方法是使代理对象传递给构造函数,以便它可以返回模拟的Sql *对象进行测试。 我还没有机会查看所有可用的C#模拟库。 public class CustomerRepository : ICustomerRepository { private string connectionString; public CustomerRepository (string connectionString) { this.connectionString = connectionString; } public int Create(Customer customer) { SqlParameter paramOutId = new SqlParameter(“@out_id”, SqlDbType.Int); paramOutId.Direction = ParameterDirection.Output; List sqlParams = new List() { paramOutId, […]

entity framework – 分层设计 – 在哪里放置连接字符串?

我使用的是一个分层架构,entity framework作为我的数据层,顶部有一堆存储库,包含Linq-To-Entities查询。 数据层是一个项目,旁边是我有一个服务层和接口,这是一个网站。 我希望我的网站负责为我的实体模型指定连接字符串。 我该怎么做呢? 我使用单例方法到达我的实体存储库,该存储库位于数据层内。 谢谢

IEnumerable与IQueryable的业务逻辑或DAL返回类型

我知道之前已经问过这些问题,我首先会列出其中一些问题(到目前为止我已阅读过的): IEnumerable vs IQueryable List,IList,IEnumerable,IQueryable,ICollection,哪个是最灵活的返回类型? 返回IEnumerable 与IQueryable IEnumerable 作为返回类型 https://stackoverflow.com/questions/2712253/ienumerable-and-iqueryable 业务逻辑与代码的视图 WPF IEnumerable vs IQueryable 作为DataSource IEnumerable VS IList VS IQueryable 我的服务应该返回什么界面? IQueryable,IList,IEnumerable? 我应该从DAL返回IEnumerable 还是IQueryable ? 正如你所看到的那样,关于这个主题的SO本身有一些很好的资源,但是有一个问题/部分的问题,我仍然不确定是否已经阅读了这些内容。 我主要关注IEnumerable和IQueryable问题,更具体地说是DAL和它的消费者之间的耦合 。 我已经找到了关于这两个接口的不同观点。 但是,我关注的是DAL返回IQueryable的含义。 据我所知,IQueryable建议/暗示有一个Linq提供商。 这是第一个问题 – 如果DAL突然需要来自非Linq提供的数据源,该怎么办? 以下方法可行,但它更像是黑客攻击吗? public static IQueryable GetAll() { // this function used to use a L2S context or similar to return data […]

在单独的数据访问和业务逻辑层中,我可以在业务层中使用Entity框架类吗?

在单独的数据访问和业务逻辑层中,我可以在业务层中使用Entity框架类吗? 编辑:我认为将来我不需要从我的业务逻辑中换出数据访问层(即将是SQL Server),但是我将用于UI层。 因此,问题更多的是在业务层中为我使用EF类有什么主要问题吗? 好像管道代码会少一些。