You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

341 lines
9.2 KiB
C#

11 months ago
using System;
using System.Collections;
using BP.DA;
namespace BP.En
{
/// <summary>
/// 属性列表
/// </summary>
public class EntityOIDAttr
{
/// <summary>
/// OID
/// </summary>
public const string OID = "OID";
}
/// <summary>
/// 属性列表
/// </summary>
public class EntityOIDMyFileAttr : EntityOIDAttr
{
/// <summary>
/// MyFileName
/// </summary>
public const string MyFileName = "MyFileName";
/// <summary>
/// MyFilePath
/// </summary>
public const string MyFilePath = "MyFilePath";
/// <summary>
/// MyFileExt
/// </summary>
public const string MyFileExt = "MyFileExt";
}
/// <summary>
/// OID实体,只有一个实体这个实体只有一个主键属性。
/// </summary>
abstract public class EntityOID : Entity
{
#region 属性
/// <summary>
/// 是否是自动增长列
/// </summary>
public virtual bool IsInnKey
{
get
{
return false;
}
}
/// <summary>
/// 主键
/// </summary>
public override string PK
{
get
{
return "OID";
}
}
/// <summary>
/// OID, 如果是空的就返回 0 .
/// </summary>
public int OID
{
get
{
return this.GetValIntByKey(EntityOIDAttr.OID);
}
set
{
this.SetValByKey(EntityOIDAttr.OID, value);
}
}
#endregion
#region 构造函数
/// <summary>
/// 构造一个空实例
/// </summary>
protected EntityOID()
{
}
/// <summary>
/// 根据OID构造实体
/// </summary>
/// <param name="oid">oid</param>
protected EntityOID(int oid)
{
this.SetValByKey(EntityOIDAttr.OID, oid);
this.Retrieve();
}
#endregion
#region override 方法
public override int DirectInsert()
{
this.OID = DBAccess.GenerOID();
return base.DirectInsert();
}
public void InsertAsNew()
{
this.OID = 0;
this.Insert();
}
public override bool IsExits
{
get
{
if (this.OID == 0)
return false;
try
{
// 生成数据库判断语句。
string selectSQL = "SELECT " + this.PKField + " FROM " + this.EnMap.PhysicsTable + " WHERE OID=" + this.HisDBVarStr + "v";
Paras ens = new Paras();
ens.Add("v", this.OID);
// 从数据库里面查询,判断有没有。
switch (this.EnMap.EnDBUrl.DBUrlType)
{
case DBUrlType.AppCenterDSN:
return DBAccess.IsExits(selectSQL, ens);
default:
throw new Exception("没有设计到。" + this.EnMap.EnDBUrl.DBType);
}
}
catch (Exception ex)
{
this.CheckPhysicsTable();
throw ex;
}
/* DEL BY PENG 2008-04-27
// 生成数据库判断语句。
string selectSQL="SELECT "+this.PKField + " FROM "+ this.EnMap.PhysicsTable + " WHERE " ;
switch(this.EnMap.EnDBUrl.DBType )
{
case DBType.MSSQL:
selectSQL +=SqlBuilder.GetKeyConditionOfMS(this);
break;
case DBType.Access:
selectSQL +=SqlBuilder.GetKeyConditionOfOLE(this);
break;
case DBType.Oracle:
selectSQL +=SqlBuilder.GetKeyConditionOfOracle(this);
break;
default:
throw new Exception("没有设计到。"+this.EnMap.EnDBUrl.DBType);
}
// 从数据库里面查询,判断有没有。
switch(this.EnMap.EnDBUrl.DBUrlType )
{
case DBUrlType.AppCenterDSN:
return DBAccess.IsExits( selectSQL) ;
case DBUrlType.DBAccessOfMSSQL:
return DBAccessOfMSSQL.IsExits( selectSQL) ;
case DBUrlType.DBAccessOfOLE:
return DBAccessOfOLE.IsExits( selectSQL) ;
case DBUrlType.DBAccessOfOracle:
return DBAccessOfOracle.IsExits( selectSQL) ;
default:
throw new Exception("没有设计到。"+this.EnMap.EnDBUrl.DBType);
}
*/
}
}
/// <summary>
/// 删除之前的操作。
/// </summary>
/// <returns></returns>
protected override bool beforeDelete()
{
if (base.beforeDelete() == false)
return false;
try
{
if (this.OID < 0)
throw new Exception("@实体[" + this.EnDesc + "]没有被实例化不能Delete().");
return true;
}
catch (Exception ex)
{
throw new Exception("@[" + this.EnDesc + "].beforeDelete err:" + ex.Message);
}
}
protected override bool beforeUpdateInsertAction()
{
return base.beforeUpdateInsertAction();
}
/// <summary>
/// beforeInsert 之前的操作。
/// </summary>
/// <returns></returns>
protected override bool beforeInsert()
{
if (this.OID == -999)
return base.beforeInsert();
if (this.OID > 0)
throw new Exception("@[" + this.ToString() + " - " + this.EnDesc + "], 实体已经被实例化 OID=[" + this.OID + "]不能Insert.");
if (this.IsInnKey)
this.OID = -1;
else
this.OID = DBAccess.GenerOID();
return base.beforeInsert();
}
/// <summary>
/// beforeUpdate
/// </summary>
/// <returns></returns>
protected override bool beforeUpdate()
{
if (base.beforeUpdate() == false)
return false;
/*
if (this.OID <= 0 )
throw new Exception("@实体["+this.EnDesc+"]没有被实例化不能Update().");
*/
return true;
}
protected virtual string SerialKey
{
get
{
return "OID";
}
}
#endregion
#region public 方法
/// <summary>
/// 作为一个新的实体保存。
/// </summary>
public void SaveAsNew()
{
try
{
this.OID = DBAccess.GenerOIDByKey32(this.SerialKey);
this.RunSQL(SqlBuilder.Insert(this));
}
catch (System.Exception ex)
{
this.CheckPhysicsTable();
throw ex;
}
}
/// <summary>
/// 按照指定的OID Insert.
/// </summary>
public void InsertAsOID(int oid)
{
this.SetValByKey("OID", oid);
try
{
this.RunSQL(SqlBuilder.Insert(this));
}
catch (Exception ex)
{
this.CheckPhysicsTable();
throw ex;
}
}
public void InsertAsOID(Int64 oid)
{
try
{
//先设置一个标记值,为的是不让其在[beforeInsert]产生oid.
this.SetValByKey("OID", -999);
//调用方法.
this.beforeInsert();
//设置主键.
this.SetValByKey("OID", oid);
this.RunSQL(SqlBuilder.Insert(this));
this.afterInsert();
}
catch (Exception ex)
{
this.CheckPhysicsTable();
throw ex;
}
}
/// <summary>
/// 按照指定的OID 保存
/// </summary>
/// <param name="oid"></param>
public void SaveAsOID(int oid)
{
this.SetValByKey("OID", oid);
if (this.Update() == 0)
this.InsertAsOID(oid);
// this.SetValByKey("OID",oid);
// if (this.IsExits==false)
// this.InsertAsOID(oid);
//this.Update();
}
#endregion
}
abstract public class EntitiesOID : Entities
{
/// <summary>
/// 构造
/// </summary>
public EntitiesOID()
{
}
#region 查询方法, 专用于与语言有关的实体
/// <summary>
/// 查询出来, 所有中文的实例 .
/// </summary>
public void RetrieveAllCNEntities()
{
this.RetrieveByLanguageNo("CH");
}
/// <summary>
/// 按语言查询。
/// </summary>
public void RetrieveByLanguageNo(string LanguageNo)
{
QueryObject qo = new QueryObject(this);
qo.AddWhere("LanguageNo", LanguageNo);
qo.DoQuery();
}
#endregion
}
}