zoukankan      html  css  js  c++  java
  • Linq to sql(二):DataContext与实体(二)

    强类型DataContext

    public partial class NorthwindDataContext : DataContext

    {

        public Table<Customer> Customers;

        public NorthwindDataContext(IDbConnection connection) : base(connection) { }

        public NorthwindDataContext(string connection) : base(connection) { }

    }

           强类型数据上下文使代码更简洁:

    NorthwindDataContext ctx = new NorthwindDataContext("server=xxx;database=Northwind;uid=xxx;pwd=xxx");

    GridView1.DataSource = from c in ctx.Customers where c.CustomerID.StartsWith("A") select new { 顾客ID = c.CustomerID, 顾客名 = c.Name, 城市 = c.City };

    GridView1.DataBind();

           DataContext其实封装了很多实用的功能,下面一一介绍。

    日志功能

    using System.IO;

     

    NorthwindDataContext ctx = new NorthwindDataContext("server=xxx;database=Northwind;uid=xxx;pwd=xxx");

    StreamWriter sw = new StreamWriter(Server.MapPath("log.txt"), true); // Append

    ctx.Log = sw;

    GridView1.DataSource = from c in ctx.Customers where c.CustomerID.StartsWith("A") select new { 顾客ID = c.CustomerID, 顾客名 = c.Name, 城市 = c.City };

    GridView1.DataBind();

    sw.Close();

           运行程序后在网站所在目录生成了log.txt,每次查询都会把诸如下面的日志追加到文本文件中:

    SELECT [t0].[CustomerID], [t0].[ContactName], [t0].[City]

    FROM [Customers] AS [t0]

    WHERE [t0].[CustomerID] LIKE @p0

    -- @p0: Input String (Size = 2; Prec = 0; Scale = 0) [A%]

    -- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 3.5.20706.1

           应该说这样的日志对于调试程序是非常有帮助的。

    探究查询

    using System.Data.Common;

    using System.Collections.Generic;

     

    NorthwindDataContext ctx = new NorthwindDataContext("server=xxx;database=Northwind;uid=xxx;pwd=xxx");

    var select = from c in ctx.Customers where c.CustomerID.StartsWith("A") select new { 顾客ID = c.CustomerID, 顾客名 = c.Name, 城市 = c.City };

    DbCommand cmd = ctx.GetCommand(select);

    Response.Write(cmd.CommandText + "<br/>");

    foreach (DbParameter parm in cmd.Parameters)

        Response.Write(string.Format("参数名:{0},参数值:{1}<br/>", parm.ParameterName, parm.Value));

    Customer customer = ctx.Customers.First();

    customer.Name = "zhuye";

    IList<object> queryText = ctx.GetChangeSet().ModifiedEntities;

    Response.Write(((Customer)queryText[0]).Name);

           在这里,我们通过DataContextGetCommand方法获取了查询对应的DbCommand

    并且输出了CommandText和所有的DbParameter。之后,我们又通过GetChangeSet方法获取了修改后的实体,

    并输出了修改内容。

  • 相关阅读:
    Windows SDK编程(Delphi版) 之 应用基础,楔子
    一个小问题引发的论证思考
    Delphi 组件开发教程指南(7)继续模拟动画显示控件
    用PyInstaller将python转成可执行文件exe笔记
    使用 .Net Memory Profiler 诊断 .NET 应用内存泄漏(方法与实践)
    Microsof Office SharePoint 2007 工作流开发环境搭建
    How to monitor Web server performance by using counter logs in System Monitor in IIS
    LINQ之Order By
    window 性能监视器
    内存泄露检测工具
  • 原文地址:https://www.cnblogs.com/kevin2013/p/1749107.html
Copyright © 2011-2022 走看看