obase社区Obase开发者QQ群:962698871
obase

欢迎查阅
OBASE帮助文档

关联端是指作为关联参与方的对象,例如,在老师与班级之间的“教学”关联中,老师和学生都是关联端;在老师、班级和教室三者之间的“上课”关联中,三者均为关联端。

特别说明 如果在具体的意义上谈论“关联”,关联端是指特定的对象,即类的特定实例。如果在抽象意义上谈论“关联”,那么关联端就表示“类”意义上的对象,不是指特定的对象。

在显式关联中,关联端还引申为定义在关联对象内部指向关联端的指针。例如,假定上述“教学”关联是一个显式关联,它有一个关联类Teaching,其中定义了两个指针_teacher和_class,分别指向参与关联的某个老师和某个班级。在不引起歧义的情况下,我们将这两个指针也称为关联端,但需要强调,这是就其引申意义而言的。

与对象一样,关联也需要持久化。作为一种关系,关联持久化的实质是保存两个对象的对应关系,因此只需要将关联各端的标识属性组合成一条记录存储就行了。以学生与班级间的“隶属”关联为例,假定该关联有一个实例“学生小六属于高三(1)班”,取小六的ID(假定为16)和高三(1)班的ID(假定为54)组合成一条记录(16,54),存储这条记录就实现了对该关联实例的持久化。存储该记录的数据库表称为关联映射表。显然,上述“隶属”关联的映射表应该有两个字段studentId和classId,其中,studentId是关联端Student的标识属性的映射字段,classId是关联端Class的标识属性的映射字段。 可以用关联某一端的映射表作为关联映射表,这种存储关联的方式称为伴随存储或伴随映射,一对多或多对一关联通常采用这种方式。也可以用独立的数据库表作为关联映射表,这种方式称为独立存储或独立映射,多对多关联一般应当采用这种方式。当然,一对多或多对一关联也可以采用独立映射,这取决于您自己的存储设计。

在关联型配置上使用AssociationEnd方法就可以获得关联端配置,下面我们逐一介绍关联型配置的API。

  • HasDefaultAsNew 设置是否将关联端对象默认作为新对象附加,此方法有一个重载。
HasDefaultAsNew(bool defaultAsNew)

此方法返回值是关联端配置,可以继续调用其他配置方法。 设置为True时,会将关联端对象作为新对象附加至上下文,在保存时会被插入至持久化层。

  • HasEntityType 设置关联端的实体类型,此方法有一个重载。
HasEntityType<TEntity>()

此方法返回值是关联端配置,可以继续调用其他配置方法。 泛型参数将作为此关联端的实体类型。

  • HasEnableLazyLoading 设置是否进行延迟加载,此方法有一个重载。
HasEnableLazyLoading(bool enableLazyLoading)

此方法的返回值是关联端配置,可以继续调用其他配置方法。 此方法是指定此关联端是否进行延迟加载,如不需要延迟加载,则要使用Include强制包含方法加载关联端对象。

  • HasLoadingPriority 指定关联端的加载优先级,此方法有一个重载。
HasLoadingPriority(int loadingPriority)

此方法的返回值是关联端配置,可以继续调用其他配置方法。 此方法是指定此关联端加载的优先级,关联端被加载时,优先级越小的越先加载。

  • HasMapping 指定关联端的映射,此方法有一个重载。
HasMapping(string keyAttribute,string targetField)

此方法的返回值是关联端配置,可以继续调用其他配置方法。 此方法用于指定关联端与持久化层字段间的映射,第一个参数为关联端映射属性的名称,第二个参数为字段名称。

  • HasValueGetter 设置属性的取值器,此方法有九个重载。
HasValueGetter(IValueGetter valueGetter)
HasValueGetter<TProperty>(Func<TStructural, TProperty> getValue)
HasValueGetter<TProperty>(Func<TStructural, IEnumerable<TProperty>> getValue)
HasValueGetter(MethodInfo method)
HasValueGetter(PropertyInfo property)
HasValueGetter(FieldInfo field)
HasValueGetter(string memberName, MemberTypes memberType)
HasValueGetter<TProperty>(MemberTypes memberType)
HasValueGetter<TProperty>()  

这些方法的返回值均为属性配置项,可以继续配置其他属性选项。 取值器是从属性中取值的方法,即使用属性的Get方法获取值。 第一个方法接受IValueGetter接口参数,可实现自定义的取值方法。 第二个方法接受表达式,指定此属性配置从类的哪个属性取值,此方法仅能配置多重性为0,1的属性。 第三个方法指定此属性配置从类的哪个属性取值,此方法仅能配置多重性为0,*的属性。 第四个至第六个方法接受反射获取的方法信息,属性信息或者字段信息,并从他们相应的内容取值。 第七个方法接受成员的名称,并根据成员类型反射获取其方法信息,属性信息或者字段信息从其中取值。 第八个方法接受泛型参数,并根据成员类型和泛型参数类型反射获取其方法信息,属性信息或者字段信息从其中取值。 第九个方法接受泛型参数,按照字段反射获取其字段信息从其中取值。

  • HasValueSetter 设置属性的设值器,共有十一个重载。
HasValueSetter<TProperty>(Expression<Func<TStructural, TProperty>> expression)
HasValueSetter<TProperty, TElement>(Expression<Func<TStructural, TProperty>> propertyExp,Func<IEnumerable<TElement>, TProperty> valueCreator)
HasValueSetter<TValue>(Action<TStructural, TValue> setValue, eValueSettingMode mode)
HasValueSetter<TValue, TElement>(Action<TStructural, TValue> setValue,Func<IEnumerable<TElement>, TValue> valueCreator)
HasValueSetter(IValueSetter valueSetter)
HasValueSetter(MethodInfo method, eValueSettingMode mode)
HasValueSetter(PropertyInfo property)
HasValueSetter(FieldInfo field)
HasValueSetter(string memberName, MemberTypes memberType)
HasValueSetter<TProperty>(MemberTypes memberType)
HasValueSetter<TProperty>()

这些方法的返回值均为属性配置项,可以继续配置其他属性选项。 设值器是为属性设值的方法,即使用属性的Set方法设置值。 第一个方法接受一个表达式表示属性的委托,将指定的属性设置为当前属性配置的设值器。 第二个方法接受表达式表示属性的委托和用于创建元素的委托,根据这两个委托构造此属性配置的设值器。 第三个方法接受一个设值方法委托和设值模式枚举,委托指示如何设值,枚举有两个值:赋值模式和追加模式。 第四个方法接受一个设值方法委托和用于创建元素的委托,根据这两个委托构造此属性配置的设值器。 第五个方法受IValueSetter接口参数,可实现自定义的设值方法。 第六个方法到第八个方法接受反射获取的方法信息,属性信息或者字段信息,并根据他们相应的内容设值。 第九个方法接受成员的名称,并根据成员类型反射获取其方法信息,属性信息或者字段信息为属性设值。 第十个方法接受泛型参数,并根据成员类型和泛型参数类型反射获取其方法信息,属性信息或者字段信息为属性设值。 第十一个方法接受泛型参数,按照字段反射获取其字段信息为属性设值。

没有找到您需要的文档?

您还可以通过人工服务在线咨询,服务时间为每天上午9点至下午6点。

If you can't find required answer, get in touch with us online. We provide service from 9:00 to 18:00.

让编程成为一件快乐的事
现在开始