using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace PalGain.Core { [Serializable] public abstract class BaseEntity { /// /// Gets or sets the entity identifier /// public int Id { get; set; } //public DateTime? SaveTime { get; set; } //public string EntityRemark { get; set; } public T TransferFrom() where T : BaseEntity { return TransferFrom((T)this, new string[] { "" }); } public T TransferFrom(string[] ignoreItems) where T : BaseEntity { return TransferFrom((T)this, ignoreItems); } public T TransferFrom(T source) { return TransferFrom(source, new string[] { "" }); } public T TransferFrom(T source, string[] ignoreItems) { T t = Activator.CreateInstance(); return TransferFrom(t, source, ignoreItems); } public T TransferFrom(T target, T source) { return TransferFrom(target, source, new string[] { "" }); } public virtual T TransferFrom(T target, T source, string[] ignoreItems) { BatchService.Framework.Utility.ClassValueCopier.Mapper (target, source, ignoreItems); return target; } public override bool Equals(object obj) { return Equals(obj as BaseEntity); } private static bool IsTransient(BaseEntity obj) { return obj != null && Equals(obj.Id, default(int)); } public virtual T GetEntity() where T : BaseEntity { return default(T); } private Type GetUnproxiedType() { return GetType(); } public virtual bool Equals(BaseEntity other) { if (other == null) return false; if (ReferenceEquals(this, other)) return true; if (!IsTransient(this) && !IsTransient(other) && Equals(Id, other.Id)) { var otherType = other.GetUnproxiedType(); var thisType = GetUnproxiedType(); return thisType.IsAssignableFrom(otherType) || otherType.IsAssignableFrom(thisType); } return false; } public override int GetHashCode() { if (Equals(Id, default(int))) return base.GetHashCode(); return Id.GetHashCode(); } public static bool operator ==(BaseEntity x, BaseEntity y) { return Equals(x, y); } public static bool operator !=(BaseEntity x, BaseEntity y) { return !(x == y); } public void Save(IRespository respostitory, string[] ignoreProperites) where T : BaseEntity { if (this.Id == 0) { respostitory.Insert((T)this); } else { var exist = respostitory.GetById(this.Id); BatchService.Framework.Utility.ClassValueCopier.Mapper((T)exist, (T)this, ignoreProperites); respostitory.Update(exist); } } public void Save(IRespository respostitory) where T : BaseEntity { this.Save(respostitory, new string[] { "" }); } } }