商信互联
在继续之前,请花一点时间回顾“从业务类库类(EF)继承”课程。
打开位于MySolution.Module项目的“数据库更新”文件夹中的Updater.cs(Updater.vb)文件。将以下代码添加到ModuleUpdater.UpdateDatabaseAfterUpdateSchema方法。
using MySolution.Module.BusinessObjects;
//...
public class Updater : DevExpress.ExpressApp.Updating.ModuleUpdater {
//...
public override void UpdateDatabaseAfterUpdateSchema() {
base.UpdateDatabaseAfterUpdateSchema();
Contact contactMary = ObjectSpace.FindObject<Contact>(
CriteriaOperator.Parse("FirstName == 'Mary' && LastName == 'Tellitson'"));
if (contactMary == null) {
contactMary = ObjectSpace.CreateObject<Contact>();
contactMary.FirstName = "Mary";
contactMary.LastName = "Tellitson";
contactMary.Email = "tellitson@example.com";
contactMary.Birthday = new DateTime(1980, 11, 27);
}
//...
ObjectSpace.CommitChanges();
}
}
Public Class Updater
Inherits DevExpress.ExpressApp.Updating.ModuleUpdater
'...
Public Overrides Sub UpdateDatabaseAfterUpdateSchema()
MyBase.UpdateDatabaseAfterUpdateSchema()
Dim contactMary As Contact = ObjectSpace.FindObject(Of Contact)( _
CriteriaOperator.Parse("FirstName == 'Mary' && LastName == 'Tellitson'"))
If contactMary Is Nothing Then
contactMary = ObjectSpace.CreateObject(Of Contact)()
contactMary.FirstName = "Mary"
contactMary.LastName = "Tellitson"
contactMary.Email = "tellitson@example.com"
contactMary.Birthday = New DateTime(1980, 11, 27)
End If
'...
ObjectSpace.CommitChanges()
End Sub
End Class
添加上面的代码后,如果不存在Contact对象,则将在应用程序数据库中创建它。
每次您运行该应用程序时,它都会将应用程序版本与数据库版本进行比较,并查找应用程序或数据库中的更改。如果数据库版本低于应用程序版本,则应用程序将引发XafApplication.DatabaseVersionMismatch事件。此事件由解决方案模板中的WinForms和ASP.NET应用程序处理。当应用程序以调试模式运行时,此事件处理程序将使用内置的数据库更新程序来更新应用程序的数据库。更新数据库架构后,将调用ModuleUpdater.UpdateDatabaseAfterUpdateSchema方法。通过这种方法,可以将所需的业务对象保存到数据库中。
正如您在上面的代码中看到的那样,eXpressApp Framework(XAF)使用对象空间对象来操纵持久对象(请参阅创建,读取,更新和删除数据)。
若要指定在BaseObjectSpace.FindObject方法调用中作为参数传递的条件,请使用CriteriaOperator。它的CriteriaOperator.Parse方法转换一个字符串,将一个条件表达式指定为其等效的CriteriaOperator。要了解有关如何指定标准的更多信息,请参阅“建立标准的方式”主题。
运行WinForms或ASP.NET应用程序。在导航控件中选择联系人项。请注意,新联系人“ Mary Tellitson”出现在右侧列表中。
请注意,在“从业务类库类(EF)继承”课程中,数据库初始化程序设置为清除数据库,以防业务模型发生更改。这意味着在业务模型中的下一次更改之后,将删除在运行时创建的所有对象。建议您使用本课中介绍的方法来创建测试目的所需的所有对象。无论数据库如何,它们都将保留在您的应用程序中。
你可以看到本教程的代码在EFDemo.Module | 数据库更新| XAF随附的EF演示(代码优先)演示的Updater.cs(Updater.vb)文件。默认情况下,EF Demo(代码优先)应用程序安装在%PUBLIC%\ Documents \ DevExpress Demos 19.2 \ Components \ eXpressApp Framework \ EFDemoCodeFirst中。
下一课: 实现自定义业务类和参考属性(EF)