随笔分类 - LINQ to SQL
光脚丫学LINQ(044):数据库中的计算所得列
摘要:视频演示:http://u.115.com/file/f220dc8a89演示重点数据库中的计算所得列实质上指的是列的数值是由表达式的计算结果提供的。比如,下面的SQL语句,创建了一个包含TotalValue的计算所得列的数据表,在列名的后面使用AS关键字,后面接着写上所使用到的表达式,就可以了。根据上面的表达式可以知道TotalValue列的数值,是由UnitPrice和UnitsInStock这两个列确定的,即这两列数值的乘积。INSERT当使用INSERT命令向包含计算所得列的数据表添加新纪录的时候,不要试图为新纪录的计算所得列提供数值,那样做的话,这个添加纪录的SQL语句会发生错误,添
阅读全文
光脚丫学LINQ(043):为实体类的列成员指定在数据库中的数据类型
摘要:视频演示:http://u.115.com/file/f21113c26演示重点通过给实体类成员的ColumnAttribute特性设置DbType属性,就可以为列成员指定它在数据库中的数据类型了。赋值给DbType的属性值是一个字符串。此字符串可以包含数据类型,数据的大小,以及是否为空。比如ColumnAttribute.DbType="NVarChar(40) NOT NULL"事实上,只有当我们根据对象模型来创建数据库的时候,这个属性才是有用。也就是调用数据上下文DataContext.CreateDatabase()方法时。当调用此方法时,它才会读取DbType的属性值,然后据此来确定
阅读全文
光脚丫学LINQ(042):如何将列表示为由数据库生成的列
摘要:演示视频:http://u.115.com/file/f2bdf2a2da演示说明在本演示中,介绍了如何在对象模型中,使实体类的列成员来映射数据表中由数据库生成值的列;也介绍了这种列成员自动获取数据库生成值的特性,及其实现办法;在演示的结尾介绍了如何使用对象关系设计器来设置由数据库生成值的列。另外说明一下,可能是因为我数学没有学好?演示中竟然将订单编号11084念成了一千一百零八十四。这回真是糗大了!^_^演示重点什么是由数据库生成的列?也就是列的数值由数据库自动生成,并不需要我们提供。比如自增长列、版本列等。通过将实体类的列成员的ColumnAttribute特性的IsDbGenerated
阅读全文
光脚丫学LINQ(041):使用对象关系设计器修改映射关系
摘要:演示视频:http://u.115.com/file/f2b86d8eab演示重点此演示视频主要介绍了如何使用VS提供的【对象关系设计器】这个工具来建立实体类之间的关系。虽然此工具可以自动根据数据表之间的关系来建立起对象模型中实体类与实体类之间的关系。然而,默认情况下,它所建立的关系貌似都是清一色的一对多关系。^_^而事实上,LINQ to SQL可以支持的关系类型不止这一种。所以,有些时候,该出手时还得出手,光靠工具还是不行的。在对象关系设计器中,实体类之间的关系通常使用的是一个带有黑色实心箭头的虚线来表示的。比如下图:如果你在两个实体类之间的虚线上右键单击的话,在弹出的菜单上你会发现有一个
阅读全文
光脚丫学LINQ(040):引发未将对象引用设置到对象的实例的异常
摘要:演示视频:http://u.115.com/file/f2737fb613演示重点此演示重点介绍当通过外键导航的方式获取关联数据对象的时候,如果没有找到相关的数据记录,是否就会引发未将对象引用设置到对象实例的异常呢?首先测试了从单一方访问集合方关联对象时的情况,结果表明,这种情况下,即使没有找到相关的数据记录也不会引发前面提到的异常。但是,接着测试从集合方获取单一方关联数据对象时,如果没有找到相关的数据记录,则是会引发未将对象引用设置到对象实例的异常的。所以,通常情况下,我们需要判断一下是否获取到了相关的单一方对象,也即判断对象是否为null。至于是什么原因造成这样的情况呢?可以在视频演示中进
阅读全文
光脚丫学LINQ(039):字段引用还是属性引用
摘要:视频演示:http://u.115.com/file/f28ae6dc98重点介绍所谓字段引用和属性引用,实际上是LINQ to SQL的映射关系中,实体类对象获取关联对象时所使用的类成员是字段,还是属性。如果是属性,就说它是属性引用;如果是字段,则认为它是字段引用。LINQ to SQL同时提供了对这两种方式的支持。还是先来看代码:下面的代码是通过Customer.Orders字段来获取与客户关联的订单对象。因为这个Orders是字段,所以它是字段引用。如果你看过我以前的演示视频,再注意观察这段代码的话,一定会发现这里并没有为引用字段的AssociationAttribute特性设置Stor
阅读全文
光脚丫学LINQ(038):隐藏联接表实体类的跨越而直接访问多对多关系数据
摘要:视频演示:http://u.115.com/file/f223235faf演示重点说明在前一个演示中,我们通过使用两个一对多的关系建立了LINQ to SQL中的伪多对多关系,之所以称之为伪关系,只是表示它并非是真正意义上的多对多关系。然而,前面的做法却给使用对象模型的调用方带来了一点小小的麻烦。因为,调用方无论是从两个实体类的哪一方去获取另外一方关联数据的时候,都必须显示的跨越实体类对象。这难道不让人觉得很麻烦吗?在这个演示中,我们要实现的效果,就是把这个链接表的实体类对象给隐藏起来。具体要实现的效果是这样的:通过实体类的某个集合属性直接来获取与之关联的另一方实体类的对象。当然,这个方案仍然
阅读全文
光脚丫学LINQ(037):由两个一对多的关系跨越联接表实体类访问多对多关系数据
摘要:视频演示:http://u.115.com/file/f28d7bc446演示重点据我所知,LINQ to SQL应该是没有直接提供多对多关系映射的支持。不过,如果能够将两个一对多的关系拼合在一起的话,也能够间接的实现多对多的映射关系。在这个演示中,创建3个实体类,其中一个是映射到链接表的实体类。其他两个实体类互相之间没有什么直接的关系,而是通过和链接表实体类分别建立起一对多的映射关系,从而达到这两个实体类之间的链接。具体的细节请参看演示视频。研习记录具体要实现的效果是这样的:通过一个客户对象来获取此客户所有订购过的产品,而通过一个产品对象来获取订购此产品的所有客户。根据微软的说法,像这种多对
阅读全文
光脚丫学LINQ(036):一对一映射关系
摘要:视频演示:http://u.115.com/file/f2edccc01b演示重点一对一的映射关系和一对多的映射关系基本相同,区别不是太大。建立一对一映射关系时,虽然可以综合使用EntityRef<TEntity>和EntitySet<TEntity>,但推荐在实体的两方都使用EntityRef<TEntity>,不推荐使用EntitySet<TEntit...
阅读全文
光脚丫学LINQ(035):映射关系的定义推测之OtherKey
摘要:视频演示:http://u.115.com/file/f2c8c9f84a演示重点要想在两个实体类之间建立映射关系的话,只需要正确的设置ColumnAttribute的Storage、ThisKey和OtherKey三个属性。如果使用的是实体类的字段而非属性的话,甚至连Storage属性都可以省略。不管是建立怎样的映射关系,最根本的目的就是想要获取与某个对象关联的一些其他的对象。比如我们获取一个C...
阅读全文
光脚丫学LINQ(034):映射关系的定义推测之ThisKey
摘要:视频演示:http://u.115.com/file/f2a1ed628e演示重点要想在两个实体类之间建立映射关系的话,只需要正确的设置ColumnAttribute的Storage、ThisKey和OtherKey三个属性。如果使用的是实体类的字段而非属性的话,甚至连Storage属性都可以省略。不管是建立怎样的映射关系,最根本的目的就是想要获取与某个对象关联的一些其他的对象。比如我们获取一个C...
阅读全文
光脚丫学LINQ(033):建立映射关系的两个实体类必须分别包含一个主键列成员
摘要:视频演示:http://u.115.com/file/f2cb57bffb演示重点建立映射关系的两个实体类必须分别包含一个主键列成员,比如主键属性,或者主键字段。正常情况下,主键列成员应该是映射到数据表的主键列上。如果在对象关系设计器中将两个实体类的主键列成员修改为普通成员的话,虽然DBML文件仍然保留着映射关系,但对象关系设计器不会生成建立映射的代码。另外建立映射关系时,只要求两个实体类都分别具...
阅读全文
光脚丫学LINQ(032):探究AssociationAttribute.Storage
摘要:视频演示:http://u.115.com/file/f220e439a4演示重点此演示用来专门探究AssociationAttribute.Storage属性,包含了如下的内容:如果不设置此属性值将会引发【未将对象引用设置到对象实例】的异常信息。不过,这只是针对实体类的属性而言,如果是使用字段来建立映射关系的话,那么可以不设置此属性值。介绍此属性的作用。此属性值是区分大小写的,即使是像VB这样不...
阅读全文
光脚丫学LINQ(031):开篇及一对多映射关系的再学习
摘要:视频演示:http://u.115.com/file/f22c71efbb特别说明从这个演示开始,将会用好几个演示连续性的介绍有关LINQ to SQL的关系映射的问题。演示说明此演示简单介绍了《关系映射》系列课程的基本安排,以及简单说明LINQ to SQL支持的三种类型的映射关系:一对一、一对多和多对多。然后比较深入的介绍一对多的映射关系,并且借此学习了EntitySet和EntityRef。...
阅读全文
光脚丫学LINQ(030):如何让实体类成员表示主键
摘要:视频演示:http://u.115.com/file/f28f964604光脚总结要想使实体类中的列属性表示数据表中的主键列,则可以为ColumnAttribute特性添加IsPrimaryKey属性,并将其设置为true。实体类如果没有指定任何主键,则数据只能读取,不能修改。是相对于数据库而言,而并非内存中的对象。可以同时指定多个主键,而且所指定的主键并非一定要与数据表中的主键对应。设置一个对应...
阅读全文
光脚丫学LINQ(029):如何将列表示为类成员
摘要:视频演示:http://u.115.com/file/f220fb5e7a光脚总结要想将实体类中的成员映射到数据表中的某一个列,可以通过给实体类成员添加ColumnAttribute这个特性。至于实体类成员所映射的是哪个数据列则有ColumnAttribute.Name属性来确定,如果没有显示的设置这个属性,则会假定所映射的数据列的名称和实体类成员的名称一致,否则就会映射到有Name属性明确指出的...
阅读全文
光脚丫学LINQ(028):如何将表表示为类
摘要:视频演示:http://u.115.com/file/f2f3b49fda光脚总结在LINQ to SQL中,想要让实体类映射到数据表,需要添加TableAttribute这个特性,通过为此特性明确的指定Name属性值,就可以指出实体类所映射的数据表的名字。如果没有指定Name属性值,LINQ to SQL则会认为所映射的数据表的名字和实体类的名字相同。除了可以将实体类映射到数据表,也可以映射到视...
阅读全文
光脚丫学LINQ(027):如何指定数据库名称(LINQ to SQL)
摘要:光脚学习说明前面的演示,无论是说到如何生成外部XML映射文件,还是DBML文件,以及对这两种文件的验证,包括前一个演示关于如何使对象模型中的实体类对象可序列化,这些都是如何创建对象模型的问题。然而,在这些演示中,我们则工作的关注点放到了如何使用工具来创建对象模型,无论是使用SQLMetal,还是对象关系设计器。接下来的一些的演示,将会在这些基础上,来看看,如何使用代码编辑器自定义对象模型&hell...
阅读全文
光脚丫学LINQ(026):如何使实体可序列化
摘要:视频演示:http://u.115.com/file/f274c53ada光脚重点总结要想使对象模型中的实体类对象可被序列化,就应该在实体类的定义中使用DataContractAttribute属性修饰,以及在实体类的列成员中使用DataMemberAttribute属性修饰就可以了。比如下面的代码:上面的这个实体类对象就可以被序列化。要向对实体类做这样的修改,除了使用手动的方式以外,还可以借助S...
阅读全文
光脚丫学LINQ(025):如何验证DBML和外部映射文件
摘要:视频演示:http://u.115.com/file/f2604631a此演示视频主要演示了如下两方面的内容:1、如何使用VS提供的架构文件来验证DBML文件和XML外部映射文件。2、如果计算机上没有架构文件,如何从微软的站点下载此文件,特别强调了保存的注意事项。您修改的外部映射文件和 .dbml 文件必须通过其各自架构定义的验证。 本主题为 Visual Studio 用户提供了执行验证过程的步...
阅读全文
浙公网安备 33010602011771号