using PaintDotNet.Base;
using PaintDotNet.DbOpreate.DbIDal;
using PaintDotNet.DbOpreate.DbModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Transactions;
namespace PaintDotNet.DbOpreate.DbCodeFirstDAL
{
class mic_script_DAL : Imic_script
{
#region 基础功能
///
/// 添加信息
/// 实体
///
///
public bool Add(mic_script model)
{
using (DBEntities dbEntity = new DBEntities())
{
dbEntity.mic_script_market.Add(model);
int recordsAffected;
recordsAffected = dbEntity.SaveChanges();
return recordsAffected > 0;
}
}
///
/// 删除信息
/// 主键
///
///
public bool Del(int id)
{
using (DBEntities dbEntity = new DBEntities())
{
var info = dbEntity.mic_script_market.SingleOrDefault(m => m.id == id);
if (info != null)
{
dbEntity.mic_script_market.Remove(info);
dbEntity.SaveChanges();
}
else
{
return false;
}
return true;
}
}
///
/// 获得信息
/// 主键
///
///
public mic_script FindDefault(int id)
{
using (DBEntities dbEntity = new DBEntities())
{
return dbEntity.mic_script_market.Where(m => m.id == id).FirstOrDefault();
}
}
///
/// 更新信息
/// 实体
///
///
public bool Update(mic_script model)
{
using (DBEntities dbEntity = new DBEntities())
{
var info = dbEntity.mic_script_market.SingleOrDefault(m => m.id == model.id);
info.id = model.id;//主键ID
info.name = model.name;//会员id
int recordsAffected;
recordsAffected = dbEntity.SaveChanges();
return recordsAffected > 0;
}
}
///
/// 获得所有信息
///
///
public List FindAll()
{
using (DBEntities dbEntity = new DBEntities())
{
return dbEntity.mic_script_market.OrderByDescending(m => m.id).ToList();
}
}
#endregion 基础功能
#region 扩展功能
///
/// 添加脚本
///
/// 主表
/// 步骤数据
///
public bool Add(mic_script model, List steps, Dictionary> args)
{
using (DBEntities dbEntity = new DBEntities())
{
//貌似sqllite不支持TransactionScope
using (var tran = dbEntity.Database.BeginTransaction())
{
try
{
//插入脚本主表数据
dbEntity.mic_script_market.Add(model);
dbEntity.SaveChanges();
//插入脚本步骤表
for (int i = 0; i < steps.Count; i++)
{
steps[i].script_id = model.id;
}
dbEntity.mic_script_step_market.AddRange(steps);
dbEntity.SaveChanges();
//插入脚本步骤参数表
List paramss = new List();
for (int i = 0; i < steps.Count; i++)
{
List argList = args[steps[i]];
if (argList != null)
{
foreach (Args arg in argList)
{
if (arg.Value == null)
continue;
mic_script_step_param param = new mic_script_step_param();
param.script_id = model.id;
param.step_id = steps[i].id;
param.param_type = (int)arg.Type;
param.param_key = arg.Key;
if (arg.Type == Dtryt.Array)
param.param_value = ((int)arg.Value).ToString();
else if (arg.Type == Dtryt.DecimalScope)
param.param_value = string.Join(",", ((List)(arg.Value)).ToArray());
else
param.param_value = arg.Value.ToString();
paramss.Add(param);
}
}
}
dbEntity.mic_script_step_param_market.AddRange(paramss);
int recordsAffected = dbEntity.SaveChanges();
tran.Commit();
//更新数量超过1证明更新成功
return true; // recordsAffected > 1;
}
catch(Exception e) {
System.Console.WriteLine(e.ToString());
tran.Rollback();
}
return false;
}
}
}
///
/// 编辑信息
///
///
///
///
public bool Update(mic_script model, List steps, Dictionary> args)
{
using (DBEntities dbEntity = new DBEntities())
{
using (var tran = dbEntity.Database.BeginTransaction())
{
try
{
//更新脚本主表数据
var info = dbEntity.mic_script_market.SingleOrDefault(m => m.id == model.id);
dbEntity.Entry(info).CurrentValues.SetValues(model);
//删除脚本步骤表数据
var setp_list = dbEntity.mic_script_step_market.Where(m => m.script_id == model.id).ToList();
dbEntity.mic_script_step_market.RemoveRange(setp_list);
//添加脚本步骤表数据
dbEntity.mic_script_step_market.AddRange(steps);
dbEntity.SaveChanges();
//删除脚本步骤参数表数据
var paramss_list = dbEntity.mic_script_step_param_market.Where(m => m.script_id == model.id).ToList();
dbEntity.mic_script_step_param_market.RemoveRange(paramss_list);
//插入脚本步骤参数表
List paramss = new List();
for (int i = 0; i < steps.Count; i++)
{
List argList = args[steps[i]];
if (argList != null)
{
foreach (Args arg in argList)
{
if (arg.Value == null)
continue;
mic_script_step_param param = new mic_script_step_param();
param.script_id = model.id;
param.step_id = steps[i].id;
param.param_type = (int)arg.Type;
param.param_key = arg.Key;
if (arg.Type == Dtryt.Array)
param.param_value = ((int)arg.Value).ToString();
else if (arg.Type == Dtryt.DecimalScope)
param.param_value = string.Join(",", ((List)(arg.Value)).ToArray());
else
param.param_value = arg.Value.ToString();
paramss.Add(param);
}
}
}
dbEntity.mic_script_step_param_market.AddRange(paramss);
//保存更改
int recordsAffected = dbEntity.SaveChanges();
//提交事务
tran.Commit();
//更新数量超过1证明更新成功
return recordsAffected > 1;
}
catch (Exception e)
{
System.Console.WriteLine(e.ToString());
tran.Rollback();
}
return false;
}
}
}
#endregion 扩展功能
}
}