C# 3.0入门系列(三)

从本节开始,笔者将会和大家一起开始体验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.JPG
运行如下的命令。  sqlmetal /server:myserver /database:northwind /namespace:nwind /code:nwind.cs
/language:csharp
你可以根据northwind数据库生成一个nwind.cs文件。你会在 linq priview的bin目录发现它^_^ 。这里的参数的含义也非常的明确,笔者也不在多赘述。

在这里,我想和大家简要介绍下这个影射文件nwind.cs.因为这个是程序自动生成的,我们暂时最好不要改,在后面的进阶中,我将为大家详细阐述此文件中code的含义,以及实现inheritance.
我们先来看Northwind 类的定义。
    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。 

None.gif[Table(Name = "Orders")]
None.gif    
public partial class Order : System.Data.DLinq.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif        
private int _OrderID;
InBlock.gif        
private string _CustomerID;
InBlock.gif        
private System.Nullable<int> _EmployeeID;
InBlock.gif
InBlock.gif…………
ExpandedSubBlockStart.gifContractedSubBlock.gif        
public Order() dot.gif{
InBlock.gif            
this._OrderID = default(int);
InBlock.gif            
this._OrderDetails = new EntitySet<OrderDetail>(new Notification<OrderDetail>(this.attach_OrderDetails), new Notification<OrderDetail>(this.detach_OrderDetails));
InBlock.gif            
this._Customer = default(EntityRef<Customer>);
InBlock.gif            
this._Employee = default(EntityRef<Employee>);
InBlock.gif            
this._Shipper = default(EntityRef<Shipper>);
ExpandedSubBlockEnd.gif        }

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

ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedBlockEnd.gif}

None.gif
None.gif
None.gif

因为影射文件是自动产生的,并不需要我们自己去手动制造,节约了我们大量劳动力。在这里,我们可以看到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. 你会发现比平时多了个选项。如图所示。linqproject.JPG

选择linq preview后,选择一个linq console application,添上名字,让我们立马开始linq之旅吧。创建好工程后,将你自己前面产生nwind.cs文件加入到工程中,在program.cs中的键入如下代码。
None.gifusing System;
None.gif
using System.Collections.Generic;
None.gif
using System.Text;
None.gif
using System.Query;
None.gif
using System.Xml.XLinq;
None.gif
using System.Data.DLinq;
None.gif
using System.Data;
None.gif
using System.Data.SqlClient;
None.gif
using nwind;
None.gif
None.gif
class Program
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif    
static void Main(string[] args)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        Northwind db 
= new Northwind("Your Connection String");
InBlock.gif
InBlock.gif        var q 
= from c in db.Customers
InBlock.gif                 select c;
InBlock.gif        
foreach (var c in q)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            Console.WriteLine(c.ContactName);
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedSubBlockEnd.gif    }

InBlock.gif
InBlock.gif
ExpandedBlockEnd.gif}

None.gif
None.gif
None.gif

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

转载于:https://www.cnblogs.com/126/archive/2006/09/06/492332.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(Navicat for MySQL)利用可视化软件navicat操作mysql,创建一个表举例(基础)

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; 步骤&#xff1a; 首先我们打开navicat:先点击下图中的表…

eclipse中egit插件使用

这篇文章当时制作有点粗糙&#xff0c;建议阅读升级版&#xff1a;eclipse中egit插件使用--升级版 使用git作为项目的代码管理工具现在是越来越火&#xff0c;网上有各种各样的文章、博客、讨论&#xff0c;其中以命令行居多。使用eclipse作为开发工具的人也是很多&#xff0c;…

以VMware workstation15.5.2pro为例如何新建虚拟机,安装镜像文件(最新)

需要用到VMware软件与镜像文件:链接:https://blog.csdn.net/hanhanwanghaha/article/details/105674470 第一步:打开VMware,点击创建新的虚拟机 第二步:选择典型,点击下一步 第三步:选择安装程序光盘镜像文件,并且下面提示已经检测到,再点击下一步

续--Flask, Django - 区别

1. 目录结构 参考&#xff1a;https://blog.csdn.net/yang9520/article/details/79740374 中文文档&#xff08;http://docs.jinkan.org/docs/flask/&#xff09;一般情况下&#xff0c;Django很系统、统一。Flask项目目录风格不同一&#xff0c;即使用上了蓝图。 2…

VMware workstation 15.5.2及镜像文件下载

链接: https://pan.baidu.com/s/175imV_FeTFcitFHay07vHQ 提取码: ayh3 希望对大家有用&#xff01; https://blog.csdn.net/hanhanwanghaha一个超级无敌可爱的人鸭 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出…

无法连接虚拟设备 floppy0,因为主机上没有相应的设备。 您要在每次开启此虚拟机时都尝试连接此虚拟设备吗?

如果出现以上情况&#xff0c;应该是没有连接镜像文件&#xff0c;在添加镜像文件的地方添加镜像文件就可以了 https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&…

CentOS 6.5 下安装 Kibana5

1. 导入Elastic PGP Key 执行命令 rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 2. 安装Kibana的rpm库使用 ll /etc/yum.repos.d/ 查看当前机器上已经安装的rpm库&#xff0c;如果没有Kibana的话需要创建。用vim创建新的repo文件&#xff0c;vim /etc/yu…

详述白盒测试的逻辑覆盖法的条件组合覆盖及其优缺点

概念&#xff1a; 设计足够多的测试用例&#xff0c;使被测程序中每个判定的所有可能的条件取值组合至少执行一次。 https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出…

详述白盒测试的逻辑覆盖的路径覆盖及其优缺点

详述白盒测试的逻辑覆盖的路径覆盖及其优缺点定义&#xff1a;与其他覆盖的关系&#xff1a;路径覆盖率&#xff1a;测试用例&#xff1a;优缺点&#xff1a;定义&#xff1a; https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&…

Jmeter下载安装详细步骤(最新)

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; 官网地址 http://jmeter.apache.org/ 步骤 1.点击Downl…

怎样使用navicat将mysql的数据表导出保存(转储SQL文件)

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; 1.点击你所创建的表&#xff0c; 2.右键点击转储SQL文件&…

Java如何连接mysql数据库详解(代码)

工具&#xff1a; https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; eclipseMysqlMysql驱动链接&#xff1a;…

docker 笔记

---恢复内容开始--- 安装 win10专业版 开启Hyper-V 安装docker 下载地址&#xff1a;https://store.docker.com/editions/community/docker-ce-desktop-windows vs2017 直接添加 项目docker docker stop zeekodb //停止这个容器 docker start zeekodb //运行这个容器 首先你要…

Python下载、安装及其配置

python下载&#xff1a;安装&#xff1a;配置环境变量&#xff1a;下载&#xff1a; 网址&#xff1a;https://www.python.org/downloads/windows/ 点击Download Windows x86-64 executable installer,下载到你觉得合适的地方下。 https://blog.csdn.net/hanhanwanghaha宝藏…

Pycharm社区版下载及安装教程

下载&#xff1a; 下载地址&#xff1a;https://www.jetbrains.com/pycharm/download/#sectionwindows 安装&#xff1a; 打开你下载的路径&#xff0c;双击.exe文件&#xff0c;点击运行 默认点击next之后&#xff0c;选择路径&#xff0c;尽量不要选择在C盘&#xff0c;然后…

DATA SHARING Help JetBrains improve its products by sending anonymous data about features and plugin

当在使用Pycharm时&#xff0c;出现 中文翻译过来的意思是&#xff1a; 帮助JetBrains改进其产品&#xff0c;发送有关所用功能和插件、硬件和软件配置、文件类型统计信息、每个项目的文件数等的匿名数据。 请注意&#xff0c;这不包括个人数据或任何敏感信息&#xff0c;如…

怎样使用Pycharm(Python工具)新建项目及创建Python文件

创建项目 https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 如有转载&#xff0c;请注明出处&#xff08;如不注明&#xff0c;盗者必究&#xff09; 首先打开Pycharm 勾选I confirm that I have rea…

以Python为例对变量类型及运算符进行举例

变量的定义&#xff1a; 在 python 中,每个变量在使用前都必须赋值 eg:变量名储存在变量中的值 变量定义完成后&#xff0c;接下来就是使用变量&#xff0c;为变量赋值。 注:在Python中不需要注明变量是什么类型&#xff0c;在python运行的时候它会自动判别是什么类型&#x…

Python的if条件语句(常用)当为多个判定条件时

基本形式&#xff1a; if 判断条件&#xff1a; 执行语句 else 执行语句&#xff1a; 当判断条件为多个值时&#xff0c;采取以下形式&#xff1a; if 判断条件1&#xff1a; 执行语句1 elif判断条件2&#xff1a; 执行语句2 elif 判断条件3&#xff1a; 执行语句3 …… els…

while循环在Python中的应用举例 及其break continue的使用

while循环定义&#xff1a; https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注&#xff01; 欢迎关注微信公众号&#xff1a;宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行&#xff01; 如有转载&#xff0c;请注明出处&#xff08;如不注明&a…