`
ljl_xyf
  • 浏览: 617332 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C# 3.0入门系列(LinQ)(三)

阅读更多

 

从本节开始,笔者将会和大家一起开始体验dlinq 了。前面我们准备了数据库,也对数据库之间的关系做了初步的了解。有了数据库之后,数据和对象是一个什么样的关系呢?从dlinq 的设计来看,它主要是为了解决data!=objects 的问题而产生的。那么,现在,有了dlinq 后数据和对象之间就可以有一个一一对应的关系了。我们既可以根据数据库生成这种影射的代码,也可以根据影射代码生成数据库。简单的说,数据库和影射代码实现了相互转化。linq preview 提供了一个很好的工具,可以帮我们实现从数据库到代码的影射。它就是sqlmetalbeta2sqlmetalC:\Program Files\Microsoft SDKs\Windows\v6.0A\bin 目录下,或C:\WINDOWS\Microsoft.NET\Framework\v3.5 目录

打开cmd ,运行sqlmetal 程序。会出现下面的提示。



运行如下的命令。  sqlmetal /server:myserver /database:northwind /namespace:nwind /code:nwind.cs
/language:csharp
你可以根据northwind 数据库生成一个nwind.cs 文件。你会在 linq priviewbin 目录发现它^_^ 。这里的参数的含义也非常的明确,笔者也不在多赘述。

在这里,我想和大家简要介绍下这个影射文件nwind.cs .因为这个是程序自动生成的,我们暂时最好不要改,在后面的进阶中,我将为大家详细阐述此文件中code 的含义,以及实现inheritance
我们先来看Northwind 类的定义。(http://www.my400800.cn)
    public partial class Northwind : DataContext {
....
首先partial 关键词是C #2. 0中出现的,本文不是讲解C #2. 0的,相关知识请参阅相关文献。Northwind 的名字是根据你数据库的名字定义的.我们发现,它必须从DataContext 类继承,才可以获得dlinq 的支持。再往下看
        public Table<Order> Orders;

        public Table<Product> Products;

        public Table<OrderDetail> OrderDetails;
Table
类是dlinq 中定义的,这里他用了一个范性的概念,类似于C++ 中的模板。但C#C++ 还是有区别,C++ 的泛型模板类似替换,只是编译时用实际类型进行替换,因此对任何类型都可以,但是C# 的泛型是在虚拟机级别上的实现,因此在编译时会进行类型检查(引)。Order, ProductOrderDetail 等,都是sqlmetal 程序根据数据库里对应的表,自动产生的类。也就是classtable 是一一对应的。而这样也恰恰实现了objectdata 的对等。让我们去看看Order 的定义吧。我这里只贴出部分。   只简单介绍几个点,更加详细内容我会在进介阶段解释,包括inheritance 

[Table(Name = "Orders")]
    public partial class Order : System.Data.DLinq.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged 
{
        private int _OrderID;
        private string _CustomerID;
        private System.Nullable<int> _EmployeeID;

        public Order() {
            this._OrderID = default(int);
            this._OrderDetails = new EntitySet<OrderDetail>(new Notification<OrderDetail>(this.attach_OrderDetails), new Notification<OrderDetail>(this.detach_OrderDetails));
            this._Customer = default(EntityRef<Customer>);
            this._Employee = default(EntityRef<Employee>);
            this._Shipper = default(EntityRef<Shipper>);
        }

        [Column(Storage = "_OrderID", DBType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDBGenerated = true)]
        public int OrderID {
            get {
                return this._OrderID;
            }
        }

}



 

 


因为影射文件是自动产生的,并不需要我们自己去手动制造,节约了我们大量劳动力。在这里,我们可以看到Order 类必须从两个接口继承,而且还要去实现接口里定义的方法。它还定义了一些私有的变量,这些似乎和数据表里字段没有关系。其实,它在Property 里描述着呢。dlinq 会为每个数据表的字段定义一个对应Property ,然后,会在其上加上 attribute ,如
[Column(Storage = "_OrderID", DBType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDBGenerated = true)]
用来描述该Property 对应数据表那个字段(Storage ),是什么类型(DBType ),是否主键(IsPrimaryKey ),是否自动增(IsDBGenerated )等。在这里,我们暂时先不要对这个文件进行修改,等你对它比较熟悉了之后,你就可以用它自己定义继承,比如product 下面还有好多种product 呢。我将会在进介中介绍。

有了影射文件后,你是不是跃跃欲试,急于想创建一个自己的linq project 了呢?在你安装了linq preview 后,选择
file->new->Project.
你会发现比平时多了个选项。如图所示。



 <!-- [endif]-->

选择linq preview 后,选择一个linq console application ,添上名字,让我们立马开始linq 之旅吧。创建好工程后,将你自己前面产生nwind.cs 文件加入到工程中,在program.cs 中的键入如下代码。

using System;
using System.Collections.Generic;
using System.Text;
using System.Query;
using System.Xml.XLinq;
using System.Data.DLinq;
using System.Data;
using System.Data.SqlClient;
using nwind;

class Program
{
    static void Main(string[] args)
    {
        Northwind db = new Northwind("http://www.my400800.cn 400电话受理中心欢迎您");

        var q = from c in db.Customers
                 select c;
        foreach (var c in q)
        {
            Console.WriteLine(c.ContactName);
        }

    }


}


 

 


运行,哈哈,你的第一个linq preview 的工程跑起来了,开心伐。呵呵,好从下章开始,笔者将着重给大家讲解dlinq 的语法。从下章开始,本系列将更名为入门系列,呵呵,本来就没有书可读吗。同时将发布在首页精华区,关注dlinq 的朋友注意接收哦。


  • 大小: 59.8 KB
  • 大小: 55.2 KB
分享到:
评论

相关推荐

    C#_3.0_LinQ入门系列

    C#_3.0_LinQ入门系列

    C# 3.0 LinQ入门系列

    C# 3.0 LinQ入门系列 介绍在C#中使用LINQ功能的教程

    接触Linq必看简单教程

    5. C#3.0入门系列(五)-之Where操作 Where操作语法。 6. C#3.0入门系列(六)-之OrderBy操作 OrderBy 操作语法。 7. C#3.0入门系列(七)--之OR工具介绍 映射工具的介绍,OR Designer 8. C#3.0入门系列(八)...

    C#3.0与.net3.5之Linq入门

    本书为linq入门书籍,简单易懂。主要介绍了linq的基本语法及应用。

    C# 3.0与.NET 3.5高级编程.pdf

    《精通C# 3.0与.NET 3.5高级编程——LINQ、WCF、WPF、WF》 LINQ查询基础 WPF编程入门 WF编程入门 SOA和WCF基础介绍

    C# 3.0与.NET 3.5高级编程

     LINQ查询基础  WPF编程入门  WF编程入门  SOA和WCF基础介绍

    C# 3.0与.NET 3.5高级编程(部分章节电子书)

    C# 3.0与.NET 3.5高级编程(部分章节电子书).  LINQ查询基础  WPF编程入门  WF编程入门  SOA和WCF基础介绍

    Linq入门(word)

    C# 3.0 入门系列--Linq.docx 整理自http://www.cnblogs.com/126/archive/2007/10/15/924858.html

    C__3.0_LinQ入门

    LINQ to XML 是一种启用了 LINQ 的内存 XML 编程接口,使用它,...但是,LINQ to XML 与 DOM 不同: 它提供一种新的对象模型,这是一种更轻量的模型, 使用也更方便,这种模型利用了 Visual C# 2008 在语言方面的改进

    C#从入门到实践源码

    重点包含C# 3.0中的面向对象编程技术和常用的扩展技术,如类、结构、数组、接口、委托、事件、异常处理、泛型、分部类型、可空类型、隐型变量、对象和集合初始化器、迭代器、匿名类型、扩展方法、Lambda表达式、LINQ...

    C#入门经典(第四版)(美)沃森 内格尔.源码

    第14章 C#3.0语言的改进 第2部分 Windows编程 第15章 Windows编程基础 第16章 Windows Forms的高级功能 第17章 使用通用对话框 第18章 部署Windows应用程序 第3部分 Web编程 第19章 Web编程基础 第20章 Web高级编程 ...

    wpf源码大全 精通C#3.0图书源码 详细源码 学习好用

    示例描述:本章演示如何使用WF进行编程入门。 AnswerToRiddleNormal 使用传统语法的猜迷游戏示例。 AnswerToRiddleWF 使用WF的猜迷游戏示例。 ApprovalOrder 订单批核WF示例程序。 SimpleStateMachine ...

    C#入门经典(第4版)中文版高清PDF【共16个分卷】.part12

    第14章 C#3.0语言的改进 第2部分 Windows编程 第15章 Windows编程基础 第16章 Windows Forms的高级功能 第17章 使用通用对话框 第18章 部署Windows应用程序 第3部分 Web编程 第19章 Web编程基础 第20章 Web高级编程 ...

    C#入门经典(第4版)中文版高清PDF【共16个分卷】.part04

    第14章 C#3.0语言的改进 第2部分 Windows编程 第15章 Windows编程基础 第16章 Windows Forms的高级功能 第17章 使用通用对话框 第18章 部署Windows应用程序 第3部分 Web编程 第19章 Web编程基础 第20章 Web高级编程 ...

    C#入门经典(第4版)中文版高清PDF【共16个分卷】.part07

    第14章 C#3.0语言的改进 第2部分 Windows编程 第15章 Windows编程基础 第16章 Windows Forms的高级功能 第17章 使用通用对话框 第18章 部署Windows应用程序 第3部分 Web编程 第19章 Web编程基础 第20章 Web高级编程 ...

    C#入门经典(第4版)中文版高清PDF【共16个分卷】.part14

    第14章 C#3.0语言的改进 第2部分 Windows编程 第15章 Windows编程基础 第16章 Windows Forms的高级功能 第17章 使用通用对话框 第18章 部署Windows应用程序 第3部分 Web编程 第19章 Web编程基础 第20章 Web高级编程 ...

    自己的LINQ入门学习资料(有linq to sql)

    这是一份自己在工作中整理的一份linq资料,希望对学习linq的人有帮助,其中还包含了一些linq to sql,C#3.0的知识

    C#入门经典(第4版)中文版高清PDF【共16个分卷】.part01

    第14章 C#3.0语言的改进 第2部分 Windows编程 第15章 Windows编程基础 第16章 Windows Forms的高级功能 第17章 使用通用对话框 第18章 部署Windows应用程序 第3部分 Web编程 第19章 Web编程基础 第20章 Web高级编程 ...

Global site tag (gtag.js) - Google Analytics