专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »DotNet » ejb3.0入门经典:C# 3.0入门系列( 3) »正文

ejb3.0入门经典:C# 3.0入门系列( 3)

来源: 发布时间:星期二, 2009年2月17日 浏览:15次 评论:0
  从本节开始笔者将会和大家起开始体验dlinq了前面我们准备了数据库也对数据库的间关系做了初步了解有了数据库的后数据和对象是个什么样关系呢?从dlinq设计来看它主要是为了解决data!=objects 问题而产生那么现在有了dlinq后数据和对象的间就可以有对应关系了我们既可以根据数据库生成这种影射代码也可以根据影射代码生成数据库简单数据库和影射代码实现了相互转化linq preview提供了个很好工具可以帮我们实现从数据库到代码影射它就是sqlmetalbeta2sqlmetal在C:Program FilesMicrosoft SDKsWindowsv6.0Abin目录下或C:WINDOWSMicrosoft.NETFrameworkv3.5目录

  打开cmd运行sqlmetal会出现下面提示



  运行如下命令 sqlmetal /server:myserver /database:northwind /:nwind /code:nwind.cs

  /language:csharp

  你可以根据northwind数据库生成个nwind.cs文件你会在 linq priviewbin目录发现它^_^ 这里参数含义也非常明确笔者也不在多赘述

  在这里我想和大家简要介绍下这个影射文件nwind.cs.这个是自动生成我们暂时最好不要改在后面进阶中我将为大家详细阐述此文件中code含义以及实现inheritance.

  我们先来看Northwind 类定义

  public partial 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, Product和OrderDetail等都是sqlmetal根据数据库里对应自动产生也就是和table是对应而这样也恰恰实现了object和data对等让我们去看看Order定义吧我这里只贴出部分 只简单介绍几个点更加详细内容我会在进介阶段解释包括inheritance 

[Table(Name = "Orders")]
  public partial Order : .Data.DLinq.INotyPropertyChanging, .ComponentModel.INotyPropertyChanged
{
    private _OrderID;
    private _CustomerID;
    private .Nullable<> _EmployeeID;
…………
    public Order …{
      this._OrderID = default();
      this._OrderDetails = EntitySet<OrderDetail>( Notication<OrderDetail>(this.attach_OrderDetails), Notication<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 OrderID …{
      get …{
         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->->Project. 你会发现比平时多了个选项如图所示





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

using ;
using .Collections.Generic;
using .Text;
using .Query;
using .Xml.XLinq;
using .Data.DLinq;
using .Data;
using .Data.SqlClient;
using nwind;
Program
…{
   void Main( args)
  …{
    Northwind db = Northwind("Your Connection String");
    var q = from c in db.Customers
         select c;
    foreach (var c in q)
    …{
      Console.WriteLine(c.ContactName);
    }
  }
}


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



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: