首页 > 数据库技术 > 详细

使用LINQ访问数据库

时间:2017-09-04 23:47:13      阅读:328      评论:0      收藏:0      [点我收藏+]

 1. LINQ to SQL 概览

  ? 把.NET 类和 SQL 数据通过关系进行映射
  ? 把 LINQ 查询转化为 SQL 语言进行执行
  ? 支持对插入,更新,删除操作进行跟踪.
   支持实体级别的验证规则
  ? 构建于 ADO.NET之上并且集成连接池和事务处理

  1.1. LINQ to SQL 功能

技术分享

  1.2. LINQ to SQL 架构

技术分享

  1.3. 创建对象映射
  ? 为了给一个特定数据库创建一个对象模型,我们必须将类映射到数据库实体当中。
  ? 有三种方式可以创建对象映射:
    –手动创建对象映射:为现有的对象添加属性
    – 使用提供的设计器来自动生成对象映射
    – 使用命令行的SQLMetal 工具生成映射

 2. 手动创建映射关系

  ? 添加 Using 指令
    – using System.Data.Linq;
    – using System.Data.Linq.Mapping;
  ? 使用属性声明
    – Table 属性
    – Column 属性

  2.1. 添加属性声明

  ? [Table(Name = "Customers")]
  ? public class Customer
  ? {
    ? [Column]
    ? public string CustomerID { get; set; }
    ? [Column]
    ? public string City { get; set; }
    ? public override string ToString()
    ? {
      ? return CustomerID + "\t" + City;
    ? }
  ? }

 3. 使用LINQ to SQL 类

技术分享

  3.1. 数据表映射

  ? 映射数据表和实体类之间的关系
  ? 使用数据库中典型的主/外键进行表示
  ? 支持灵活的关系查询并且不用写任务的SQL 代码就可以执行处理过程

 4. 使用主/外键关系

  4.1. 主/外键关系

技术分享

 4.2. LINQ设计器中的关系映射

技术分享

 4.3. 模型中的代码关联

public partial class Product {
public int ProductID;
public string ProductName;
public Nullable<int> SupplierID;
public Nullable<int> CategoryID;
public Supplier Supplier;
public Category Category;
}
public partial class Supplier {
public int SupplierID;
public string CompanyName;
public EntitySet<Product> Products;
}
public partial class Category {
public int CategoryID;
public EntitySet<Product> Products;
}

技术分享

 4.4. 使用主/外键关系

技术分享

  4.5. 代码

NorthwindDataContext db = new NorthwindDataContext();
();
var suppliers = from s in db.Suppliers
where s.Products.Count > 2
select s;
foreach (Supplier supplier in suppliers) {
Response.Write("<h3>" + supplier.CompanyName + "</h3>");
foreach (Pro duct produc t in supplier.Products) {
Response.Write("-- ");
Response.Write(product.ProductName);
Response.Write("<br/>");
}
}

 4.6. 使用 Suppliers 和 Products 表

NorthwindDataContext db = new NorthwindDataContext();
SupplierList.DataSource = from s in db.Suppliers
where s.Products.Count > 2
select s;
SupplierList.DataBind();

 4.7. 使用数据关系进行绑定

<asp:Repeater ID "SupplierList" runat "server">
ID= SupplierList runat= server >
<ItemTemplate>
<h3> <%# Eval("CompanyName") %> </h3>
<asp:Repeater DataSource=<%# Eval("Products")%> runat="server">
<ItemTemplate>
-- <%# Eval("ProductName") %> <br />
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>

 4.8. 查看结果

技术分享

 4.9. 使用 join 连结数据表

NorthwindDataContext db = new NorthwindDataContext();
var results = from c in db.Customers join o in db.Orders
on c.CustomerID equals o.CustomerID into custOrders
from o in custOrders
select new {
Customer = c.CompanyName,
OrderDate = o.OrderDate,
OrderTotal = o.OrderDetails.Sum(d=>d.UnitPrice)
};
GridView1.DataSource = results;
GridView1.DataBind();

 4.10. 查看结果

技术分享

 5. 数据分页

  5.1. 使用 Skip() 和 Take() 进行数据分页

技术分享

  5.2. Skip() 和 Take() 方法

int startRow = Convert.ToInt32(Request.QueryString["startRow"]);
NorthwindDataContext db = new NorthwindDataContext();
var results = from c in db.Customers join o in db.Orders
on c.CustomerID equals o.CustomerID into custOrders
from o in custOrders
select new {
Customer = c.CompanyName,
OrderDate = o.OrderDate,
OrderTotal = o.OrderDetails.Sum(d=>d.UnitPrice)
};
GridView1.DataSource = results.Skip(startRow).Take(10);
GridView1.DataBind();

 

 6. 修改数据

  6.1. 更新数据

NorthwindDataContext db = new NorthwindDataContext();
Product product = db.Products.Single(p => p.ProductName== "Chai");
product.UnitsInStock = 11;
product.ReorderLevel = 10;
product.UnitsOnOrder = 2;
db.SubmitChanges();

  6.2. 插入数据

NorthwindDataContext db = new NorthwindDataContext();
Supplier supplier = new Supplier();
supplier.CompanyName = "Scott Guthrie";
supplier.HomePage = "http://weblogs.asp.net/scottgu";
Product product1 = new Product();
product1.ProductName = "LINQ Talk";
product1.UnitPrice = new Decimal(99.9);
Product product2 = new Product();
product2.ProductName = "ASP.NET Tips/Tricks Talk";
product2.UnitPrice = new Decimal(101.99);
supplier.Products.Add(product1);
supplier.Products.Add(product2);
db.Suppliers.InsertOnSubmit(supplier);
db.SubmitChanges();

  6.3. 删除数据

NorthwindDataContext db = new NorthwindDataContext();
var supplier = db.Suppliers.FirstOrDefault(s=>s.CompanyName == “ABC");
if ((supplier != null) && (supplier.Products.Count == 0))
{
db.Suppliers.DeleteOnSubmit(supplier);
db.SubmitChanges();
}

 

使用LINQ访问数据库

原文:http://www.cnblogs.com/lxh168/p/7476338.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!