代码:BusinessObjects.cs
using
System;
using DevExpress.Persistent.Base;
using DevExpress.Persistent.BaseImpl;
using DevExpress.Xpo;
using DevExpress.Persistent.AuditTrail;
namespace AuditDemo.Module {
[DefaultClassOptions]
public class Album : BaseObject {
public Album(Session session) : base (session) { }
private string name;
public string Name {
get {
return name;
}
set {
SetPropertyValue( " Name " , ref name, value);
}
}
private int year;
public int Year {
get {
return year;
}
set {
SetPropertyValue( " Year " , ref year, value);
}
}
private Artist artist;
[Association( " Artist-Albums " )]
public Artist Artist {
get {
return artist;
}
set {
SetPropertyValue( " Artist " , ref artist, value);
}
}
private XPCollection < AuditDataItemPersistent > auditTrail;
public XPCollection < AuditDataItemPersistent > AuditTrail {
get {
if (auditTrail == null ) {
auditTrail = AuditedObjectWeakReference.GetAuditTrail(Session, this );
}
return auditTrail;
}
}
}
[DefaultClassOptions]
public class Artist : BaseObject {
public Artist(Session session) : base (session) { }
private string name;
public string Name {
get {
return name;
}
set {
SetPropertyValue( " Name " , ref name, value);
}
}
[Association( " Artist-Albums " )]
public XPCollection < Album > Albums {
get {
return GetCollection < Album > ( " Albums " );
}
}
private XPCollection < AuditDataItemPersistent > auditTrail;
public XPCollection < AuditDataItemPersistent > AuditTrail {
get {
if (auditTrail == null ) {
auditTrail = AuditedObjectWeakReference.GetAuditTrail(Session, this );
}
return auditTrail;
}
}
}
}
using DevExpress.Persistent.Base;
using DevExpress.Persistent.BaseImpl;
using DevExpress.Xpo;
using DevExpress.Persistent.AuditTrail;
namespace AuditDemo.Module {
[DefaultClassOptions]
public class Album : BaseObject {
public Album(Session session) : base (session) { }
private string name;
public string Name {
get {
return name;
}
set {
SetPropertyValue( " Name " , ref name, value);
}
}
private int year;
public int Year {
get {
return year;
}
set {
SetPropertyValue( " Year " , ref year, value);
}
}
private Artist artist;
[Association( " Artist-Albums " )]
public Artist Artist {
get {
return artist;
}
set {
SetPropertyValue( " Artist " , ref artist, value);
}
}
private XPCollection < AuditDataItemPersistent > auditTrail;
public XPCollection < AuditDataItemPersistent > AuditTrail {
get {
if (auditTrail == null ) {
auditTrail = AuditedObjectWeakReference.GetAuditTrail(Session, this );
}
return auditTrail;
}
}
}
[DefaultClassOptions]
public class Artist : BaseObject {
public Artist(Session session) : base (session) { }
private string name;
public string Name {
get {
return name;
}
set {
SetPropertyValue( " Name " , ref name, value);
}
}
[Association( " Artist-Albums " )]
public XPCollection < Album > Albums {
get {
return GetCollection < Album > ( " Albums " );
}
}
private XPCollection < AuditDataItemPersistent > auditTrail;
public XPCollection < AuditDataItemPersistent > AuditTrail {
get {
if (auditTrail == null ) {
auditTrail = AuditedObjectWeakReference.GetAuditTrail(Session, this );
}
return auditTrail;
}
}
}
}
代码:MSSqlServerTimestampStrategy.cs
using
System;
using System.Data.SqlClient;
using DevExpress.Xpo;
using DevExpress.Persistent.AuditTrail;
namespace AuditDemo.Module {
public class MSSqlServerTimestampStrategy : IAuditTimestampStrategy{
DateTime cachedTimeStamp;
#region IAuditTimeStampStrategy Members
public DateTime GetTimestamp(AuditDataItem auditDataItem) {
return cachedTimeStamp;
}
public void OnBeginSaveTransaction(Session session) {
SqlCommand command = new SqlCommand( " select getdate() " , (SqlConnection)session.Connection);
cachedTimeStamp = (DateTime)command.ExecuteScalar();
}
#endregion
}
}
using System.Data.SqlClient;
using DevExpress.Xpo;
using DevExpress.Persistent.AuditTrail;
namespace AuditDemo.Module {
public class MSSqlServerTimestampStrategy : IAuditTimestampStrategy{
DateTime cachedTimeStamp;
#region IAuditTimeStampStrategy Members
public DateTime GetTimestamp(AuditDataItem auditDataItem) {
return cachedTimeStamp;
}
public void OnBeginSaveTransaction(Session session) {
SqlCommand command = new SqlCommand( " select getdate() " , (SqlConnection)session.Connection);
cachedTimeStamp = (DateTime)command.ExecuteScalar();
}
#endregion
}
}
代码:TimestampService.asmx.cs
using
System;
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;
namespace TimestampWebService {
[WebService(Namespace = " http://localhost/ " )]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem( false )]
public class TimestampService : System.Web.Services.WebService {
[WebMethod]
public DateTime GetTime() {
return DateTime.Now;
}
}
}
using System.Data;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;
namespace TimestampWebService {
[WebService(Namespace = " http://localhost/ " )]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem( false )]
public class TimestampService : System.Web.Services.WebService {
[WebMethod]
public DateTime GetTime() {
return DateTime.Now;
}
}
}
代码:WebServiceTimestampStrategy.cs
using
System;
using DevExpress.Persistent.AuditTrail;
using DevExpress.Xpo;
using AuditDemo.Module.TimestampWebService;
namespace AuditDemo.Module {
public class WebServiceTimestampStrategy : IAuditTimestampStrategy {
DateTime cachedTimeStamp;
#region IAuditTimeStampStrategy Members
public DateTime GetTimestamp(AuditDataItem auditDataItem) {
return cachedTimeStamp;
}
public void OnBeginSaveTransaction(Session session) {
try {
TimestampService service = new TimestampService();
cachedTimeStamp = service.GetTime();
}
catch {
throw new Exception( " Cannot access the TimeStampWebService. Make sure it's running. " );
}
}
#endregion
}
}
using DevExpress.Persistent.AuditTrail;
using DevExpress.Xpo;
using AuditDemo.Module.TimestampWebService;
namespace AuditDemo.Module {
public class WebServiceTimestampStrategy : IAuditTimestampStrategy {
DateTime cachedTimeStamp;
#region IAuditTimeStampStrategy Members
public DateTime GetTimestamp(AuditDataItem auditDataItem) {
return cachedTimeStamp;
}
public void OnBeginSaveTransaction(Session session) {
try {
TimestampService service = new TimestampService();
cachedTimeStamp = service.GetTime();
}
catch {
throw new Exception( " Cannot access the TimeStampWebService. Make sure it's running. " );
}
}
#endregion
}
}