从本节开始,笔者将会和大家一起开始体验dlinq
了。前面我们准备了数据库,也对数据库之间的关系做了初步的了解。有了数据库之后,数据和对象是一个什么样的关系呢?从dlinq
的设计来看,它主要是为了解决data!=objects
的问题而产生的。那么,现在,有了dlinq
后数据和对象之间就可以有一个一一对应的关系了。我们既可以根据数据库生成这种影射的代码,也可以根据影射代码生成数据库。简单的说,数据库和影射代码实现了相互转化。linq preview
提供了一个很好的工具,可以帮我们实现从数据库到代码的影射。它就是sqlmetal
。beta2
的sqlmetal
在C:\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 priview
的bin
目录发现它^_^
。这里的参数的含义也非常的明确,笔者也不在多赘述。
在这里,我想和大家简要介绍下这个影射文件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, Product
和OrderDetail
等,都是sqlmetal
程序根据数据库里对应的表,自动产生的类。也就是class
和table
是一一对应的。而这样也恰恰实现了object
和data
的对等。让我们去看看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的关键概念,帮助初学者快速掌握这门强大的编程语言。 1. **匿名方法与Lambda表达式**: C# 3.0 引入了匿名方法,它允许我们在不定义单独的方法的情况下,直接在需要的地方...
总结来说,C# 3.0入门教程会涵盖这些核心概念,通过学习,你可以掌握C#语言的基础,并能够利用LINQ进行高效的数据操作,为后续深入学习C# 4.0及以上版本打下坚实基础。通过实践,你会逐渐熟悉并爱上这种强大而优雅的...
#### 三、LINQ入门实例分析 以下是一个简单的LINQ查询示例,用于从字符串数组中筛选长度为5的元素,并将结果转换为大写: ```csharp string[] names = {"Burke", "Connor", "Frank", "Everett", "Albert", "George...
C# 3.0 林林总总的 LINQ(Language Integrated Query,语言集成查询)是一个强大的数据查询工具,它允许开发者在编程语言中直接编写SQL风格的查询,极大地提高了代码的可读性和效率。这个入门系列将逐步引导你了解并...
在“C# 3.0 锐利体验系列课程(1)”中,"概览"部分将为学员提供一个整体的入门指南,介绍上述关键特性的概念和基本用法。通过这一部分的学习,开发者将能够对C# 3.0的主要改进有一个全面的理解,为进一步深入学习打下...
总之,《C# 3.0: 初学者指南》是一本内容丰富、讲解详尽的好书,它不仅适合初学者快速入门,也适合有一定基础的开发者进一步深化对C#的理解。通过本书的学习,读者将能够充分挖掘C# 3.0的潜力,创造出更加优雅、高效...
LINQ(Language Integrated Query,语言集成查询)是C# 3.0中的一个重大创新,它将查询表达式直接整合到编程语言中,提供了统一的方式来访问各种数据源。通过LINQ,开发者可以使用相同的语法对数据库、XML、集合等...
《C# 3.0入门》是一本专为初学者设计的编程教程,旨在帮助读者掌握C# 3.0编程语言的核心概念和技术。这本书由Wrox出版社出版,于2008年5月发行,提供了全面且深入的C#学习路径。配合提供的源码,读者可以更好地理解...
4. **Linq(Language Integrated Query)**:C#3.0的另一大亮点是引入了内置的查询语言,允许开发者以更自然的语句进行数据查询,支持数据库、集合等多种数据源。 5. **匿名方法和委托**:在C#3.0之前,实现事件...
LINQ(Language Integrated Query,语言集成查询)是.NET框架3.0引入的一项重要技术,它为C#和VB.NET等编程语言提供了一种内建的、类型安全的查询方式,使得开发者可以直接在代码中书写SQL风格的查询语句,而无需...
C#是一种广泛应用于游戏开发、桌面应用、移动应用以及Web应用等领域的...总之,C#基础入门系列教程将涵盖以上所有知识点,通过理论讲解和实例演示,帮助初学者快速上手C#编程,为进一步深入学习和应用打下坚实的基础。
7. **LINQ(Language Integrated Query)**:C# 3.0引入的LINQ提供了一种在代码中集成查询的强大方式,简化了对数据库、数组和其他数据源的操作。 8. **异步编程**:C# 5.0及更高版本引入了async/await关键字,使得...
此外,C# 3.0引入了LINQ(Language Integrated Query),使得数据查询更加简洁和直观。 C#的程序结构通常包括命名空间(Namespace)、类定义、方法定义等部分。通过`using`指令,我们可以导入所需的命名空间,以便...
LINQ to XML 是一种启用了 LINQ 的内存 XML 编程接口,使用它,...但是,LINQ to XML 与 DOM 不同: 它提供一种新的对象模型,这是一种更轻量的模型, 使用也更方便,这种模型利用了 Visual C# 2008 在语言方面的改进
4. **LINQ(Language Integrated Query)**: C# 3.0引入了LINQ,允许开发者使用类似SQL的查询语法操作各种数据源。源码中可能会有对数据库操作或集合查询的示例。 5. **异步编程**: C# 5.0引入了async和await关键字...
7. **Lambda表达式**: Lambda表达式是C# 3.0引入的新特性,但在C# 2010中得到了更广泛的应用,特别是在Linq查询中。 8. **LINQ(Language Integrated Query)**: LINQ是一种统一的数据查询语言,可以在各种数据源...