`
bolutes
  • 浏览: 863444 次
文章分类
社区版块
存档分类
最新评论

光脚丫学LINQ(039):字段引用还是属性引用

 
阅读更多

视频演示:http://u.115.com/file/f28ae6dc98

重点介绍
所谓字段引用和属性引用,实际上是LINQ to SQL的映射关系中,实体类对象获取关联对象时所使用的类成员是字段,还是属性.如果是属性,就说它是属性引用;如果是字段,则认为它是字段引用。LINQ to SQL同时提供了对这两种方式的支持。还是先来看代码:

下面的代码是通过Customer.Orders字段来获取与客户关联的订单对象。因为这个Orders是字段,所以它是字段引用。

如果你看过我以前的演示视频,再注意观察这段代码的话,一定会发现这里并没有为引用字段的AssociationAttribute特性设置Storage属性值。这在字段引用的情况下是正确的做法。相反,如果要是设置了这个属性值的话,反而可能会引发异常。因为通常情况下这个引用字段不会是私有字段,如果是私有字段,外界要如何来访问呢?如果将一个非私有字段的名称指定给ColumnAttribute.Storage属性的话,是会发生异常的。
但是,如果使用的是属性引用的话,则必须设置Storage属性。如果不设置则会发生异常。

上面这个字段引用的方式,如果要使用属性引用的话,则可以这样来实现:

这回可是设置了AssociationAttribute.Storage属性,并且指定的是一个私有字段的名称。否则会引发异常。

通过上面两段代码应该可以清楚知道什么叫做字段引用和属性引用了。具体的细节信息可以参看演示视频中的解说。
虽然大多数的时候,都可以在字段引用和属性引用之间做出选择。通常情况下可能我们也会使用字段引用的方式,因为它更简洁。然而,当通过集合方实体类对象来获取单一方实体类对象的时候,字段引用的方式就不可行了。如下面的代码:

虽然这段代码很简洁,但是,当运行代码的时候,会引发【未将对象引用设置到对象实例】的异常。其中的缘由可参看演示视频。
这种情况下,只有使用属性引用的方式,如下面的代码:

比较这两段代码应该能够明白为什么字段引用的方式会引发异常呢!
因此,我个人觉得虽然字段引用的方式可以使代码变的简洁,但是还是推荐使用属性引用的方式。特别是当我们需要添加一些自定义规则,或者业务逻辑的时候,除了属性引用以外,字段引用根本无法实现嘛。

光脚丫思考 2010-10-30

分享到:
评论

相关推荐

    LINQ Unleashed: for C# (Unleashed) (Paperback - Jul 24, 2008)

    LINQ Unleashed: for C# (Unleashed) (Paperback - Jul 24, 2008)

    学习LINQ:LINQ查询基础

    LINQ查询基础:介绍LINQ的基础,什么是LINQ,如何使用以及表达式及其查询方法

    LINQ学习LINQ学习LINQ学习LINQ学习LINQ学习

    LINQ学习LINQ学习LINQ学习LINQ学习LINQ学习LINQ学习LINQ学习LINQ学习LINQ学习LINQ学习LINQ学习LINQ学习LINQ学习LINQ学习LINQ学习

    LINQ详细教程

    一步一步学Linq to sql(一):预备知识 3 一步一步学Linq to sql(二):DataContext与实体 8 一步一步学Linq to sql(三):增删改 14 一步一步学Linq to sql(四):查询句法 20 一步一步学Linq to sql(五):...

    LINQ中文系列教程

    一步一步学Linq to sql(一):预备知识 4 一步一步学Linq to sql(二):DataContext与实体 9 一步一步学Linq to sql(三):增删改 15 一步一步学Linq to sql(四):查询句法 21 一步一步学Linq to sql(五):...

    LINQ基础教程(中文版) 适合初学者

    一步一步学Linq to sql(一):预备知识 4 一步一步学Linq to sql(二):DataContext与实体 9 一步一步学Linq to sql(三):增删改 15 一步一步学Linq to sql(四):查询句法 21 一步一步学Linq to sql(五):...

    LINQ中文版文档,LINQ 入门,LINQ 学习,LINQ编程指南

    介绍生成 LINQ 项目所需的 .NET Framework 版本、引用和命名空间。 5.对 LINQ 的 Visual Studio IDE 和工具支持 描述对象关系设计器、对查询的调试器支持以及其他与 LINQ 相关的 IDE 功能。 6.LINQ 常规编程指南 ...

    LINQ中文教程(WORD格式)

    一步一步学Linq to sql(一):预备知识 4 一步一步学Linq to sql(二):DataContext与实体 9 一步一步学Linq to sql(三):增删改 15 一步一步学Linq to sql(四):查询句法 21 一步一步学Linq to sql(五):...

    linq unleashed for c#

    linq unleashed for c#linq unleashed for c#linq unleashed for c#

    LINQ中文教程LINQ中文教程

    一步一步学Linq to sql(一):预备知识 4 一步一步学Linq to sql(二):DataContext与实体 9 一步一步学Linq to sql(三):增删改 15 一步一步学Linq to sql(四):查询句法 21 一步一步学Linq to sql(五):...

    LINQ中文学习手册及学习网站

    介绍生成 LINQ 项目所需的 .NET Framework 版本、引用和命名空间。 5.对 LINQ 的 Visual Studio IDE 和工具支持 描述对象关系设计器、对查询的调试器支持以及其他与 LINQ 相关的 IDE 功能。 6.LINQ 常规编程指南 ...

    LINQ学习文档

    LINQ学习文档:LINQ体验(1)——LINQ简介和LINQ to SQL.doc

    linq学习基础实例

    介绍了linq的几个经典示例,适合初步学习linq语言

    一步一步学 Linq to sql

    一步一步学 Linq to sql 一步一步学 Linq to sql.doc 一步一步学 Linq to sql.doc

    LINQ中文教程

    LINQ中文教程LINQ初体验之LINQ to Object 1 一步一步学Linq to sql(一):预备知识 4 一步一步学Linq to sql(二):DataContext与实体 9 一步一步学Linq to sql(三):增删改 15 一步一步学Linq to sql(四):...

    LINQ Unleashed for C#

    这是一本不错的,有关linq的书(英文)

    VS2008 LINQ基础教程

    一步一步学Linq to sql(一):预备知识 4 一步一步学Linq to sql(二):DataContext与实体 9 一步一步学Linq to sql(三):增删改 15 一步一步学Linq to sql(四):查询句法 21 一步一步学Linq to sql(五):...

    学习LINQ工具,可以实时编译C#LINQ语句

    学习LINQ工具,可以实时编译C#LINQ语句

    LINQ中文教程word格式

    一步一步学Linq to sql(一):预备知识 2 一步一步学Linq to sql(二):DataContext与实体 4 一步一步学Linq to sql(三):增删改 8 一步一步学Linq to sql(四):查询句法 11 一步一步学Linq to sql(五):...

    LINQPad,学习Linq的好助手

    LINQPad可以使用LINQ交互查询SQL数据库 LINQPad支持C# 3.0 和 Framework 3.5的全部功能: LINQ to SQL LINQ to Objects LINQ to XML LINQPad 也是一个很好的学习LINQ的工具,包含《C# 3.0 in a Nutshell》一书中...

Global site tag (gtag.js) - Google Analytics