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