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#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
}
}