vs2008提供非常好的设计工具来进行数据库和实体类的映射。使用这个工具。可以可视化的生成实体类不用写代码。而且生成了很多相应的方法
打开vs2008后。建立web或window项目都可以。添加新项选择 linq to sql classes这个选项就OK了
在这之前你的vs2008应该先打开服务器对象窗口用来建立数据库链接。如果没有的话选择--视图--服务器窗口(server explorer)。可以建立数据库链接。具体过程就不说了。我选择的sqlserver2000中的northwind数据库
这时候再看linq to sql classes的设计器。有左右两个区域。左边那个区域是用来拖放表的。右边是用来拖放存储过程或用户的function的。
选择region表拖到表区域。就建立了一个Region的实体类了。在设计器文件的.design.cs中可以看到。而且还生成一个数据库上下文类。可以用这个类来直接进行数据各个操作
[System.Data.Linq.Mapping.DatabaseAttribute(Name="Northwind")]
public partial class DataClassesDataContext : System.Data.Linq.DataContext 就是这个东西
还有Region的实体类。大家自己看了。
建立一个存储过程。prcSelectRegion 就是select * from region 了大家自己写了
然后选择一个存储过程拖放到右侧的方法区域。这样你的linq就可以使用这个存储过程。生成的代码还是.design.cs中。所以你要保存几次。才能看到代码。
这个存储过程返回的是region的所以内容。在linq操作中所有的东西都是对象。所以这个存储过程的返回值也是一个对象。就是和region关系一样的东西。所以代码还生成了一个实体类和region一样的实体类
public partial class prcSelectRegionResult
{
private int _RegionID;
private string _RegionDescription;
。。。
}
生成的访问存储过程这个方法是这个:
[Function(Name="dbo.prcSelectRegion")]
public ISingleResult<prcSelectRegionResult> prcSelectRegion()
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())),);
return ((ISingleResult<prcSelectRegionResult>)(result.ReturnValue));
}//的
其中泛型类型就prcSelectRegionResult
linq也可以访问带输入参数和输出参数的存储过程。
把上面的存储过程修改一下阿
create proc prcSelectRegion
@ID int,
@desc varchar(50) output
as
select * from Region where RegionID = @ID
select @desc = 'hello world'
然后在设计器中。把原来的那个方法拖删掉把服务器刷新一下阿。把新的存储过程拖放上去。注意保存几次,新的代码
才出来的。
[Function(Name="dbo.prcSelectRegion")]
public ISingleResult<prcSelectRegionResult> prcSelectRegion([Parameter(Name="@ID", DbType="Int")] System.Nullable<int> _ID, [Parameter(Name="@desc", DbType="VarChar(50)")] ref string _desc)
{
IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), _ID, _desc);
_desc = ((string)(result.GetParameterValue(1)));
return ((ISingleResult<prcSelectRegionResult>)(result.ReturnValue));
}
其他地方怎么访问呢。就是这个东西
DataClassesDataContext dc = new DataClassesDataContext();
string desc = String.Empty;
var result = dc.prcSelectRegion(2,ref desc);//2就是输入参数。desc就是输出参数要使用ref
result就是region中的数据结果
本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。