日安!
我有一个遗留应用程序,其中数据访问层由使用SqlConnection/SqlCommand完成查询的类组成,结果被传递到封装在非类型化数据集/数据表中的上层。
现在,我正在将这个应用程序集成到用ASP.NET MVC 2编写的较新的应用程序中,其中使用LINQ2SQL进行数据访问。我不想重写生成在SqlConnection/SqlCommand中传递给LINQ2SQL的复杂查询的复杂逻辑(并且没有权限这样做),但我希望这些查询的结果是强类型对象集合,而不是非类型化数据集/数据表。
其基本思想是将旧的数据访问代码包装在一个漂亮的ASP.NET MVC“模型”中。
做这件事的快速\容易的方法是什么?
另外,下面的答案是基于: 的一个很好的解决方案
发布于 2011-01-11 11:49:26
您可以采用的一种方法是使用DataReader和传输。因此,对于您想要使用的每个对象,在数据传输对象文件夹中定义类(或者不管您的项目是如何构造的),那么在您的数据访问层中有一些类似下面的内容。
我们在具有高度规范化数据库的项目中使用了非常类似的方法,但是在代码中,我们不需要这种规范化,所以我们使用过程将数据放入更可用的对象中。如果还需要保存这些对象,则需要处理将对象转换为数据库命令。
,快速\简单的方法是什么?
根据类的数量等,这不可能是最快的方法,但它将允许您使用与Linq对象非常类似的对象,并且根据所使用的集合的类型(IList、IEnumerable等),您将能够对这些类型的集合使用扩展方法。
public IList<NewClass> LoadNewClasses(string abc)
{
List<NewClass> newClasses = new List<NewClass>();
using (DbCommand command = /* Get the command */)
{
// Add parameters
command.Parameters["@Abc"].Value = abc;
// Could also put the DataReader in a using block
IDataReader reader = /* Get Data Reader*/;
while (reader.Read())
{
NewClass newClass = new NewClass();
newClass.Id = (byte)reader["Id"];
newClass.Name = (string)reader["Name"];
newClasses.Add(newClass);
}
reader.Close();
}
return newClasses;
}https://stackoverflow.com/questions/4656990
复制相似问题