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

news/2024/7/4 1:31:11 标签: linq, sql, string, table, class, 2010
class="baidu_pl">
class="article_content clearfix">
class="htmledit_views">

视频演示: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


http://www.niftyadmin.cn/n/1704143.html

相关文章

新手学appium-数据参数化,字典实现

如果你是固定读取的账号密码两个值,那么可以考虑用字典来实现。随机值不在本次参数化的讨论范畴之内。 创建字典用大括号,数据由 key/value 键值对组成,keys()方法返回字典中的键列表。values()返回字典中的值列表,items()返回&am…

将RGB颜色转换成16bit颜色

将RGB颜色转换成16bit颜色 [适合与游戏编程初学者] 我在做16bit alpha blending的时候需要判断颜色键(ColorKey),而在我的游戏引擎中,ColorKey是用Windows RGB颜色表示的,这就需要将RGB颜色转换成16bit颜色,下面是我的做法。 …

Java后端--39--Springboot配置文件介绍与使用

一、常见的配置文件形式 常见的配置文件格式:xml、properties、json、yml xml:Springboot基本不会用,常用在Mybatis中 properties:Springboot常用 json:自定义本地初始化数据使用 yml:Springboot常用 1.1 yml格式配置文件 yml使用空格缩进区分不同层级,不同层级之间…

Kubernetes ResourceQuota Controller内部实现原理及源码分析

本文是对基于Kubernetes V1.5的代码,对ResourceQuotaController的原理分析和源码分析,给出了对应的源码目录结构分析,内部实现原理图,及其完整流程的源码分析,希望能帮助你对Kubernetes ResourceQuota和ResourceQuotaC…

光脚丫学LINQ(040):引发未将对象引用设置到对象的实例的异常

演示视频:http://u.115.com/file/f2737fb613演示重点此演示重点介绍当通过外键导航的方式获取关联数据对象的时候,如果没有找到相关的数据记录,是否就会引发未将对象引用设置到对象实例的异常呢? 首先测试了从单一方访问集合方关…

文本比较算法Ⅰ——LD算法

在日常应用中,文本比较是一个比较常见的问题。文本比较算法也是一个老生常谈的话题。 文本比较的核心就是比较两个给定的文本(可以是字节流等)之间的差异。目前,主流的比较文本之间的差异主要有两大类。一类是基于编辑距离&#x…

Java后端--40--Springboot单元测试应用

一、基础单元测试 1、添加相关pom依赖,默认是已经有的: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId>

Kubernetes Resource QoS机制解读

摘要&#xff1a;本文对Kubernetes Resource QoS介绍&#xff0c;机制解析和简单的源码分析。 Kubernetes Resource QoS Classes介绍 Kubernetes根据Pod中Containers Resource的request和limit的值来定义Pod的QoS Class。 对于每一种Resource都可以将容器分为3中QoS Classes…