How to: Initialize Business Objects with Default Property Values in Entity Framework 如何:在EF中用默认属性值初始化业务对象
When designing business classes, a common task is to ensure that a newly created business object is initialized with default property values. This topic explains how different types of properties can be initialized. As an example, a Contact business class will be implemented. After a Contact object is created, its properties will be initialized with default values.
设计业务类时,常见的任务是确保使用默认属性值初始化新创建的业务对象。本主题说明如何初始化不同类型的属性。例如,将实现联系人业务类。创建"联系人"对象后,其属性将用默认值初始化。

Tip 提示
A complete sample project is available in the DevExpress Code Examples database at http://www.devexpress.com/example=T209960
完整的示例项目可在 DevExpress 代码示例数据库中找到,http://www.devexpress.com/example=T209960
.
Tip 提示
A similar example for XPO is available in the How to: Initialize Business Objects with Default Property Values in XPO topic.
XPO 的类似示例在 XPO 主题中的"如何:使用默认属性值初始化业务对象"主题中提供。
Simple Property
简单属性
You can support an IXafEntityObject interface in your business classes. This interface declares the IXafEntityObject.OnCreated method intended for object initialization. The OnCreated method is called only once for an object - after the object is created. Whenever you need to initialize an object, place the initialization code into the OnCreated method body. The following code snippet demonstrates how simple value properties can be initialized.
您可以在业务类中支持 IXafEntityObject 接口。此接口声明用于对象初始化的 IXafEntityObject.OnCreated 方法。在创建对象后,仅对对象调用一次 OnCreated 方法。每当需要初始化对象时,将初始化代码放入 OnCreated 方法正文中。以下代码段演示如何初始化简单值属性。
public class Contact : Person, IXafEntityObject {
//...
void IXafEntityObject.OnCreated() {
FirstName = "Sam";
TitleOfCourtesy = TitleOfCourtesy.Mr;
}
void IXafEntityObject.OnLoaded() { }
void IXafEntityObject.OnSaving() { }
}
To see another example of initializing a simple property, refer to the Initialize a Property After Creating an Object (EF) tutorial lesson.
要查看初始化简单属性的另一个示例,请参阅创建对象 (EF) 教程课后初始化属性。
Reference Property
引用属性
Initialization of reference properties differs from initialization of simple properties, primarily in that you may need to obtain a reference to an existing object. For this purpose, use the IObjectSpace.FindObject method of the object's Object Space. To access the Object Space from the business object code, you should support the IObjectSpaceLink interface. The following code snippet demonstrates how to initialize reference properties with new and existing objects.
引用属性的初始化不同于简单属性的初始化,主要是因为您可能需要获取对现有对象的引用。为此,请使用对象对象空间的 IObjectSpace.FindObject 方法。要从业务对象代码访问对象空间,应支持 IObjectSpaceLink 接口。以下代码段演示如何使用新对象和现有对象初始化引用属性。
public class Contact : Person, IXafEntityObject, IObjectSpaceLink {
//...
void IXafEntityObject.OnCreated() {
// ...
Address1 = objectSpace.CreateObject<Address>();
Address1.Country = objectSpace.FindObject<Country>(CriteriaOperator.Parse("Name = 'USA'"));
if (Address1.Country == null) {
Address1.Country = objectSpace.CreateObject<Country>();
Address1.Country.Name = "USA";
}
Manager = objectSpace.FindObject<Contact>(
CriteriaOperator.Parse("FirstName = 'John' && LastName = 'Doe'"));
}
void IXafEntityObject.OnLoaded() { }
void IXafEntityObject.OnSaving() { }
private IObjectSpace objectSpace;
IObjectSpace IObjectSpaceLink.ObjectSpace {
get { return objectSpace; }
set { objectSpace = value; }
}
}
Collection Property
集合属性
The following code snippet demonstrates how to populate the Phones collection with predefined phone numbers.
以下代码段演示如何使用预定义的电话号码填充电话集合。
public class Contact : Person, IXafEntityObject, IObjectSpaceLink {
//...
void IXafEntityObject.OnCreated() {
// ...
PhoneNumber phone1 = objectSpace.FindObject<PhoneNumber>(
CriteriaOperator.Parse("Number = '555-0101'"));
PhoneNumber phone2 = objectSpace.FindObject<PhoneNumber>(
CriteriaOperator.Parse("Number = '555-0102'"));
PhoneNumbers.Add(phone1);
PhoneNumbers.Add(phone2);
}
void IXafEntityObject.OnLoaded() { }
void IXafEntityObject.OnSaving() { }
private IObjectSpace objectSpace;
IObjectSpace IObjectSpaceLink.ObjectSpace {
get { return objectSpace; }
set { objectSpace = value; }
}
}
Calculated Property
计算属性
A calculated property value is automatically updated when the associated property values are changed. To learn how to implement a regular calculated property, refer to the Make a Property Calculable tutorial lesson. To learn how to implement a calculated property based on property values of the objects contained in a child object collection. Refer to the How to: Calculate a Property Value Based on Values from a Detail Collection help topic.
更改关联的属性值时,将自动更新计算的属性值。要了解如何实现常规计算属性,请参阅创建属性可计算教程课。了解如何实现基于子对象集合中包含的对象的属性值的计算属性。请参阅"如何:基于详细信息集合帮助中的值计算属性值"主题。
Initialize an Object Created via the New Action
初始化通过新操作创建的对象
In certain scenarios, you may need to initialize only objects created specifically via the New Action. To learn how to do this, refer to the How to: Initialize an Object Created Using the New Action help topic.
在某些情况下,您可能需要仅初始化通过"新建操作"专门创建的对象。要了解如何执行此操作,请参阅"如何:初始化使用"新建操作"帮助创建的对象主题。
Initialize a Property of a Child Object with a Value Taken from a Master Object
初始化子对象的属性,具有从主对象获取的值
You can set the default value for the child object's property within the setter of a property that refers to the master object.
您可以在引用主对象的属性的 setter 中设置子对象属性的默认值。
public class ChildObject {
// ...
public MasterObject MasterObject {
get { return masterObject; }
set {
if (master == value) return;
masterObject = value;
if (value != null) {
this.SomeProperty = value.DefaultForChildren;
}
}
}
}
Since the reference property of a child object will not be initialized until committing changes, it is necessary to use a ViewController to initialize the child object depending on the master object (see How to: Initialize an Object Created Using the New Action).
由于子对象的引用属性在提交更改之前不会初始化,因此有必要使用 ViewController 根据主对象初始化子对象(请参阅:使用"新操作"创建的对象初始化)。
How to: Initialize Business Objects with Default Property Values in Entity Framework 如何:在EF中用默认属性值初始化业务对象的更多相关文章
- How to: Initialize Business Objects with Default Property Values in XPO 如何:在 XPO 中用默认属性值初始化业务对象
When designing business classes, a common task is to ensure that a newly created business object is ...
- 《理解 ES6》阅读整理:函数(Functions)(一)Default Parameter Values
对于任何语言来说,函数都是一个重要的组成部分.在ES6以前,从JavaScript被创建以来,函数一直没有大的改动,留下了一堆的问题和很微妙的行为,导致在JavaScript中使用函数时很容易出现错误 ...
- QML的默认属性default property
qml中,普通的属性,需要添加属性名称,属性内容,如 color: “red” 默认属性则可以直接书写,去掉方括号,在写重用的QML组件式比较有用,例如将一个QmL外部资源封装好,内部具体的item, ...
- Implement Property Value Validation in Code 在代码中实现属性值验证(XPO)
This lesson explains how to set rules for business classes and their properties. These rules are val ...
- Default Parameter Values in Python
Python’s handling of default parameter values is one of a few things that tends to trip up most new ...
- How to: Calculate a Property Value Based on Values from a Detail Collection 如何:基于详细信息集合中的值计算属性值
This topic describes how to implement a business class, so that one of its properties is calculated ...
- Format a Property Value 设置属性值的格式
In this lesson, you will learn how to set a display format and an edit mask to a business class prop ...
- Implement Property Value Validation in the Application Model 在应用程序模型中实现属性值验证
In this lesson, you will learn how to check whether or not a property value satisfies a particular r ...
- Entity Framework Code-First(10.3):Property Mappings
Property Mappings using Fluent API: Here, we will learn how to configure properties of an entity cla ...
随机推荐
- js表达式和语句趣味题讲解与技术分享
技术分享 问题1 { a: 1 } + 1 // ? ({ a: 1 }) + 1 // ? 1 + { a: 1 } // ? 答案 { a: 1 } + 1 // 1 ({ a: 1 }) + 1 ...
- 关于javascript中=的返回值
今天看了一段代码,大概是这样的: function test(){ a=4; b=5; return b=a; } test();//返回? 返回值是多少呢?运行结果是4 这可以理解为将a的值赋给b以 ...
- 小白学 Python 爬虫(15):urllib 基础使用(五)
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- js之观察者模式和发布订阅模式区别
观察者模式(Observer) 观察者模式指的是一个对象(Subject)维持一系列依赖于它的对象(Observer),当有关状态发生变更时 Subject 对象则通知一系列 Observer 对象进 ...
- 论文阅读 | Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks
简述 在文本语义相似度等句子对的回归任务上,BERT , RoBERTa 拿到sota. 但是,它要求两个句子都被输入到网络中,从而导致巨大开销:从10000个句子集合中找到最相似的sentence- ...
- 2017 ACM/ICPC 沈阳 F题 Heron and his triangle
A triangle is a Heron’s triangle if it satisfies that the side lengths of it are consecutive integer ...
- A.Math Problem
题意:这里有n个区间,你需要添加一个区间,使得每个区间都至少有一个共同的点在这个区间,且长度最小,输出最小的长度. 分析:找出所有区间右端点的最小值,和所有区间左端点的最大值,然后答案就是max(0, ...
- java概述和java环境按照,java开发体验
java概述: Java的发展可以归纳如下的几个阶段. (1)第一阶段(完善期):JDK 1.0 ( 1995年推出)一JDK 1.2 (1998年推出,Java更名为Java 2): (2)第二阶段 ...
- 大数据学习笔记——Linux基本知识及指令(理论部分)
Linux学习笔记整理 上一篇博客中,我们详细地整理了如何从0部署一套Linux操作系统,那么这一篇就承接上篇文章,我们仔细地把Linux的一些基础知识以及常用指令(包括一小部分高级命令)做一个梳理, ...
- liunx新装tomcat之后,tomcat不能识别新发布的项目
遇到的问题 在liunx新装tomcat之后,发布之前的项目,发现在tomcat不能识别新发布的项目,打成war包,还是直接把项目拷贝过去都不行. 环境:虚拟机:VMware 主机系统:win10 虚 ...