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

欢迎查阅
OBASE帮助文档

在面向对象软件工程中,我们用对象来描述现实世界中的事物,例如现实世界中的汽车反映到对象系统中就是一个“汽车”对象。而“类”是对同一类对象的抽象,它所指代的概念概括了这一类事物的本质特征,同时忽略了非本质特征,例如“汽车”这个词(概念)就概括了这一类事物的本质特征,即承载人或物体从进行空间移动的能力。 Obase使用“实体型”这一概念来描述面向对象模型中的类(不包含关联类)。

特别说明 为什么不直接用“类”而要用“实体型”这个概念呢?因为在面向对象模型中,普通的类和关联类统称为“类”,直接用“类”这个概念容易造成混淆。而在ER模型中,用“实体”指称现实中的事务,Obase借用了这一概念。 那为什么不叫“实体类”而叫“实体型”呢?这主要是因为,Obase只关注类的数据结构,而不关注行为;“型”就是指类型,它指称的就是数据结构。

对于配置实体型我们已经很熟悉了,使用ModelBuilder的Entity<>方法即可得到实体型的配置,下面我们逐一介绍实体型配置的API。

  • AssociationReference ,此方法用于配置关联引用,共有四个重载:
AssociationReference(string name, Type assoType, bool isMultiple);
AssociationReference<TResult>(Expression<Func<TEntity, TResult>> expression);
AssociationReference<TAssociation>(string name,bool isMultiple);
AssociationReference<TEnd1, TEnd2>(string name,bool isMultiple);

这四个方法的返回值都是关联引用配置,关于关联引用配置将在配置关联引用一节详细介绍。 第一个方法是手动配置方法,此方法仅在Obase中注册一个关联引用的配置项,不配置设值器和取值器,也不会检查传入的参数。 这里引入了一个新的概念:设值器和取值器,他们是针对类属性的一种配置,这里的设置和取值都是针对属性来说的,所以设值器即是属性的Set方法,取值器是Get方法。属性配置项、关联引用配置项、关联端配置项均可以配置设值器和取值器。 这个方法的三个参数分别是关联引用名称,关联引用的关联型和关联引用对象的多重性(0,1还是0,*)。 第二个方法是自动配置方法,参数为用表达式表示的委托,形如p=>p.Students。这一方法会根据表达式自动解析要配置的关联引用,得到要配置的名称,关联型和多重性,并配置默认的设值器和取值器。注意,调用此方法前需要配置对应的关联型,否则会抛出异常。 第三个方法是用于配置显式关联型的关联引用,泛型参数为显式关联型,两个参数分别为关联引用名称和多重性。这里的名称需要与类内关联引用属性访问器名称相同,否则会抛出异常。 第四个方法是用于配置隐式关联型的关联引用,两个泛型参数对应隐式关联型的泛型参数(注意顺序),参数则和第三个方法相同。

  • Attribute ,此方法用于配置属性,共有四个重载:
Attribute(string name, Type dataType);
Attribute(string name);
Attribute<TResult>(Expression<Func<TStructural, TResult>> expression);
Attribute<TResult>(Expression<Func<TStructural, TResult>> expression,Type dataType);

这四个方法的返回值都是属性配置,关于属性配置将在配置属性一节详细介绍。 第一个方法是手动配置方法,此方法仅在Obase中注册一个关属性的配置项,不配置设值器和取值器,也不会检查传入的参数。此方法的两个参数分别为属性的名称和属性在Obase中的类型,此类型会被映射为数据库的字段类型,如你有一个属性是List< string >但数据库内是以,分割字符串,这时就应当将类型配置为string,并为这个属性配置特殊的设值器和取值器。 第二个方法是自动配置方法,参数为要配置的属性访问器名称,会根据取到的属性访问器自动配置类型和取值器设值器。 第三个方法是自动配置方法,参数为用表达式表示的委托,会根据取到的属性访问器自动配置类型和取值器设值器。 第四个方法是指定类型配置方法,参数为用表达式表示的委托和类型,会将属性的类型配置为你指定的类型,并根据取到的属性访问器自动配置取值器设值器。

  • HasConcurrentConflictHandlingStrategy 设置并发策略,只有一个重载。
HasConcurrentConflictHandlingStrategy(eConcurrentConflictHandlingStrategy strategy);

此方法返回值为实体型配置项,可以继续配置其他实体型选项。 此方法接受一个枚举参数,用于指定此类发生并发冲突时的策略,关于并发冲突会在之后的乐观并发模型内详细介绍。

  • HasConstructor 设置实体型的构造器,此方法有六个重载。
HasConstructor(ConstructorInfo constructorInfo);
HasConstructor(Func<TStructural> construct);
HasConstructor<T>(Func<T, TStructural> construct);
HasConstructor<T1, T2>(Func<T1, T2, TStructural> construct);
HasConstructor<T1, T2, T3>(Func<T1, T2, T3, TStructural> construct);
HasConstructor<T1, T2, T3, T4>(Func<T1, T2, T3, T4, TStructural> construct);

这六个重载可以分为两类,即使用ConstructorInfo作为参数和使用委托作为参数的,他们的返回值都是构造函数参数配置,关于此类型的配置会在配置构造函数一节详细介绍。 第一个方法接受一个ConstructorInfo作为参数,此参数即为反射获取的构造函数信息。 第二到第六个函数接受一个委托参数,他们有从1到5个不等的泛型参数,这些参数中最后一个参数为构造函数的返回值类型,其余参数为构造函数的参数类型。

  • HasKeyAttribute 是配置键属性方法,共有两个重载。
HasKeyAttribute(string attrName);
HasKeyAttribute<TAttribute>(Expression<Func<TEntity, TAttribute>> expression);

这两个方法的返回值都是实体型配置项,可以继续配置其他实体型选项。 第一个方法是使用传入的名称指定实体型的主键,无法找到符合的属性时会抛出异常。 第二个方法是使用表达式表示的委托指定实体型的主键。 主键即是此实体型的标识属性,用于区分此实体的唯一性,如果要配置的主键符合类名+id或类名+code的模式,则无需调用此方法也可以自动配置为主键。

  • HasKeyIsSelfIncreased 设置主键是否自增,只有一个重载。
HasKeyIsSelfIncreased(bool keyIsSelfIncreased)

此方法的返回值为实体型配置项,可以继续配置其他实体型选项。 传入参数为是否自增,如果只有一个主键且主键是int或者long,并且没有指定是否自增,会被自动配置为自增。

  • HasNoticeAttributes 设置实体型的通知属性,此方法有一个重载。
HasNoticeAttributes(List<string> noticeAttributes);

此方法的返回值是实体型配置项,可以继续配置其他实体型选项。 此方法接受的参数是一个字符串列表,里面的每个值指示了在发送变更通知时会被发送的属性。 变更通知的详细内容会在之后的更改通知章节内介绍。

  • HasNotifyCreation 设置在创建此实体时是否发送通知,此方法有一个重载。
HasNotifyCreation(bool notifyCreation)

此方法的返回值是实体型配置项,可以继续配置其他实体型选项。 此方法接受的参数为是否进行通知。 变更通知的详细内容会在之后的更改通知章节内介绍。

  • HasNotifyDeletion 设置在删除此实体时是否发送通知,此方法有一个重载。
HasNotifyDeletion(bool notifyCreation)

此方法的返回值是实体型配置项,可以继续配置其他实体型选项。 此方法接受的参数为是否进行通知。 变更通知的详细内容会在之后的更改通知章节内介绍。

  • HasNotifyUpdate 设置在修改此实体时是否发送通知,此方法有一个重载。
HasNotifyUpdate(bool notifyCreation)

此方法的返回值是实体型配置项,可以继续配置其他实体型选项。 此方法接受的参数为是否进行通知。 变更通知的详细内容会在之后的更改通知章节内介绍。

  • HasVersionAttribute 设置版本键属性,每调用一次追加一个版本键,此方法有两个重载。
HasVersionAttribute<TAttribute>(Expression<Func<TObject, TAttribute>> expression)
HasVersionAttribute(string attribute)

此方法的返回值是实体型配置项,可以继续配置其他实体型选项。 第一个方法接受一个表达式表示的委托,将指示的属性配置为版本键属性。 第二个方法接受属性名称,将指示的属性配置为版本键属性。 版本键属性用于处理并发冲突,将在之后的乐观并发模型内详细介绍。

  • Ignore 忽略某个属性,此方法有一个重载。
Ignore<TResult>(Expression<Func<TStructural, TResult>> expression)

此方法无返回值。 此方法接受一个表达式表示的委托,指示目标属性被Obase模型忽略。

  • ToTable 设置映射表,共有一个重载。
ToTable(string table)

此方法的返回值是实体型配置项,可以继续配置其他实体型选项。 此方法接受映射表名作为参数,当映射表名与类名相同时,可以不进行配置。

没有找到您需要的文档?

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

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

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