我正在开发一个项目,其数据库大约有30个表和大约100个存储过程(MSSQL)。
所有DAL代码都是使用数据访问应用程序块实现的。我相信即使我只需要在现有表中添加新字段,这种方法也需要花费太多时间。首先,我必须更新数据库脚本,然后我必须检查代码中的SP包装器和/或查询以反映我的更改。
大多数DAL(90%)都是这样的:
// "idiom #1" for my project
public static DataSet GetSomeData(int a, int b)
{
return SqlHelper.ExecuteDataSet(
connection,
"select x, y from tab1 where a = " +
a.ToString() +
" and b = " +
b.ToString());
}
然后,当从某个地方调用它时:
// "idiom #2"
var ds = DAL.GetSomeData(123, 456);
var t = ds.Tables[0];
var x = t.Rows[0][0];
var y = t.Rows[0][1];
我坚信这个想法真的很糟糕,但我不确定正确的方法是什么。我绝对相信我想看到的至少是类型对象而不是DataRows和这些对象的集合而不是DataTables。我也确信我不想自己实现所有这些。
几天前,我发现BLToolkit似乎解决了这个问题,但我不确定使用它是否是个好主意,因为我没有足够的经验。我真的很喜欢这个例子:
public abstract class PersonAccessor : DataAccessor
{
[SqlText(@"SELECT * FROM Person WHERE FirstName = @firstName")]
public abstract List<Person> GetPersonListByFirstName(string @firstName);
[SprocName("sp_GetPersonListByLastName")]
public abstract List<Person> GetPersonListByLastName(string @lastName);
...
虽然我不能称之为ORM,但这种方法是抽象的 - 足以让我想要它而不是我现在所拥有的,但另一方面,它仍然是相当低级的。
< / LI>我也试过Fluent NHibernate,虽然我非常喜欢它的功能,但它看起来确实很慢。
这里的解决方案是什么?优先事项是:
int.Parse(row[0][3].ToString())
答案 0 :(得分:1)
我建议您使用.NET ORM。您可以在此处了解有关选择ORM的更多信息:
NHibernate, Entity Framework, active records or linq2sql
使用ORM执行“SELECT * FROM Person WHERE FirstName = @FirstName”并不会明显变慢,并且您的开发速度可能会快得多。