using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
|
namespace PalGain.Core
|
{
|
[Serializable]
|
public abstract class BaseEntity
|
{
|
/// <summary>
|
/// Gets or sets the entity identifier
|
/// </summary>
|
public int Id { get; set; }
|
//public DateTime? SaveTime { get; set; }
|
//public string EntityRemark { get; set; }
|
|
public T TransferFrom<T>() where T : BaseEntity
|
{
|
return TransferFrom<T>((T)this, new string[] { "" });
|
}
|
public T TransferFrom<T>(string[] ignoreItems) where T : BaseEntity
|
{
|
return TransferFrom<T>((T)this, ignoreItems);
|
}
|
public T TransferFrom<T>(T source)
|
{
|
return TransferFrom<T>(source, new string[] { "" });
|
}
|
public T TransferFrom<T>(T source, string[] ignoreItems)
|
{
|
T t = Activator.CreateInstance<T>();
|
return TransferFrom<T>(t, source, ignoreItems);
|
}
|
public T TransferFrom<T>(T target, T source)
|
{
|
return TransferFrom<T>(target, source, new string[] { "" });
|
}
|
public virtual T TransferFrom<T>(T target, T source, string[] ignoreItems)
|
{
|
BatchService.Framework.Utility.ClassValueCopier.Mapper<T, T>
|
(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<T>() 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<T>(IRespository<T> 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, T>((T)exist, (T)this, ignoreProperites);
|
respostitory.Update(exist);
|
}
|
}
|
|
public void Save<T>(IRespository<T> respostitory) where T : BaseEntity
|
{
|
this.Save<T>(respostitory, new string[] { "" });
|
}
|
}
|
}
|