using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ant.Data;
using System.Data;
using System.Transactions;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Configuration;
using Ant.Frame;
using Ant.ORM;
namespace Ant.ORM
{
///
///多表操作数据持久类
/// 要求配置Ant.Data配置节
///
public class PersistMore
{
private static string logfile = ConfigurationManager.AppSettings["DataDynamicsARLic"].ToLower();
public static string ConnectionType = ConfigurationManager.AppSettings["ConnectionType"];//连接方式
//private DataAccess DAO = DataAccessFactory.CreateDataAccess(Config.DefaultDatabaseProperty);
#region 将实体转成SQL语句
#region 插入INTSET方法
///
/// 保存实体对象
///
/// 实体对象
///
public bool SaveEntity(Dictionary listtype)
{
DataAccess db = null;
using (TransactionScope soce = new TransactionScope())
{
try
{
QueryCommandBuilders querycommd = new QueryCommandBuilders();
foreach (EntyTypeData mod in listtype.Values)
{
MetaData md = new MetaData();
md.FiledMeta= MetaDataManager.GetMetaData(mod.EntityValue.GetType());//获取实体的元数据
//if ((Object.Equals(db, null)) || (Object.Equals(db, DBNull.Value)))
//{
// db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
//}
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//创建不同的SQL语句
qcBuilder.Md = md;//所有实体属性
qcBuilder.PersistType = MetaDataManager.GetEntityType(mod.EntityValue);//操作类型
qcBuilder.QueryComm = qcBuilder.GetQueryCommand();
querycommd.Add(qcBuilder);
}
int num = 0;
foreach (QueryCommandBuilder querymod in querycommd)
{
num = num + db.ExecuteNonQuery(querymod.QueryComm.CommandText, querymod.QueryComm.Parameters);
}
soce.Complete();
return num > 0;
}
catch (Exception ex)
{
return false;
}
}
}
///
/// 可以实现不在同一个数据库的事务提交(异步)
///
///
///
public bool SubmitChanges(Dictionary listtype)
{
DataAccess db = null;
using (TransactionScope soce = new TransactionScope())
{
try
{
QueryCommandBuilders querycommd = new QueryCommandBuilders();
foreach (EntyTypeData mod in listtype.Values)
{
MetaData md = new MetaData();
md.FiledMeta = MetaDataManager.GetMetaData(mod.EntityValue.GetType());//获取实体的元数据
//if ((Object.Equals(db, null)) || (Object.Equals(db, DBNull.Value)))
//{
// db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
//}
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//创建不同的SQL语句
qcBuilder.Md = md;//所有实体属性
qcBuilder.PersistType = MetaDataManager.GetEntityType(mod.EntityValue);
qcBuilder.QueryComm = qcBuilder.GetQueryCommand();
querycommd.Add(qcBuilder);
}
int num = 0;
foreach (QueryCommandBuilder querymod in querycommd)
{
num = num + db.ExecuteNonQuery(querymod.QueryComm.CommandText, querymod.QueryComm.Parameters);
}
soce.Complete();
return num > 0;
}
catch (Exception ex)
{
return false;
}
}
}
#endregion
#region 删除DELETE方法
public bool DeleteEntity(Dictionary listtype)
{
DataAccess db = null;
try
{
QueryCommandBuilders querycommd = new QueryCommandBuilders();
foreach (EntyTypeData entity in listtype.Values)
{
MetaData md = new MetaData();
md.FiledMeta= MetaDataManager.GetMetaData(entity.GetType());
//if ((Object.Equals(db, null)) || (Object.Equals(db, DBNull.Value)))
//{
// db = DataAccessFactory.CreateDataConnection(md.ModuleName);//创建数据库连接
//}
QueryCommandBuilder qcBuilder = QueryCommandBuilder.Instance(db.DatabaseType);//创建不同的SQL语句
qcBuilder.Md = md;//所有实体属性
qcBuilder.EntityType = md.FiledMeta.EntityType;
qcBuilder.PersistType = EntityPersistType.Delete;
//qcBuilder.Fields = MetaDataManager.GetEntityFields(entity);
qcBuilder.QueryComm = qcBuilder.GetQueryCommand();
querycommd.Add(qcBuilder);
}
int num = 0;
foreach (QueryCommandBuilder querymod in querycommd)
{
num = num + db.ExecuteNonQuery(querymod.QueryComm.CommandText, querymod.QueryComm.Parameters);
}
return num > 0;
}
catch (Exception ex)
{
return false;
}
finally
{
db.Close();
db = null;
}
}
#endregion
#endregion
}
}