存储过程——在LINQ中使用(六)
上述几篇都将了存储与数据库,关联的一些实例,首先感谢各位大神们在前几篇文章中提到的问题,本人还在学习中,这次介绍下在linq中如何应用存储过程;
- LINQ简介
- 语言集成查询(LINQ)在对象领域和数据领域架起了一座桥梁
- LINQ提供了一种跨领域各种数据和数据格式是数据的一致模型
- 微软的ORM解决方案
- LINQ项目引用解决方案,面向.NET
- VSIDE对LINQ的强大支持
- LINQ原理
- LINQ to SQL 会将对象模型中的语言集成查询转为SQL,然后将他们发送到数据库中进行执行
- 当数据库返回结果时,LINQ to SQL 会将它们转换回你可以用自己编程语言处理的对象
- IDE工具提供LINQ(O/R设计器)
上述所提到的都是一些理论方面的知识,下面先介绍了VS 中如何建立LINQ to SQL(即O/R关系),我们在解决方案中添加LINQ to SQL 类:
查看生成的后台代码
public partial class ProductDataContext : System.Data.Linq.DataContext { private static System.Data.Linq.Mapping.MappingSource mappingSource = new AttributeMappingSource(); #region 可扩展性方法定义 partial void OnCreated(); #endregion public ProductDataContext(string connection) : base(connection, mappingSource) { OnCreated(); } public ProductDataContext(System.Data.IDbConnection connection) : base(connection, mappingSource) { OnCreated(); } public ProductDataContext(string connection, System.Data.Linq.Mapping.MappingSource mappingSource) : base(connection, mappingSource) { OnCreated(); } public ProductDataContext(System.Data.IDbConnection connection, System.Data.Linq.Mapping.MappingSource mappingSource) : base(connection, mappingSource) { OnCreated(); } }
再回到IDE中
- 连接数据库,如下
- 将存储过程直接拖到,上图中所描绘的红色区域
生成后台代码如下
[global::System.Data.Linq.Mapping.FunctionAttribute(Name="dbo.productTypeAdd")] public int productTypeAdd([global::System.Data.Linq.Mapping.ParameterAttribute(Name="Name", DbType="NVarChar(50)")] string name) { IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), name); return ((int)(result.ReturnValue)); }
在程序中应用如下
后台代码调用LINQ to SQL 如下
ProductDataContext pdc = new ProductDataContext(); private void ProuType_Load(object sender, EventArgs e) { dataGridView1.DataSource = pdc.QueryproductType(); } private void btnAdd_Click(object sender, EventArgs e) { pdc.productTypeAdd(txtProduType.Text);//添加产品类型 dataGridView1.DataSource = pdc.QueryproductType();//查询所有产品类型 }
总结:
- LINQ to SQL的方法实际上解决了大部分的数据转换对象关系问题
- 存储过程在O/R中生成的对象中,其实就类里面的一个方法,传递参数和存储过程一致
疑问:
- LINQ 和 ADO.NET 都能解决与数据交互问题,那具体什么时候引用呢?各有什么优势
- O/R貌似需通过VS工具操作,有没有更好的方法去封装他
- 存储过程在O/R中转换程函数,如果出现异常如何去维护,是更改O/R生成的类还是直接更改存储过程
上述问题,希望大神们指点,小弟初次接触存储过程,有不足指出望直接指出。。。