using OpenAuth.Domain; using OpenAuth.Domain.Interface; using System; using System.Linq; namespace OpenAuth.App { public class RevelanceManagerApp { public IUnitWork _unitWork { get; set; } /// /// 添加关联 /// 比如给用户分配资源,那么firstId就是用户ID,secIds就是资源ID列表 /// /// 关联的类型,如"UserResource" public void Assign(string type, string firstId, string[] secIds) { Assign(type, secIds.ToLookup(u => firstId)); } public void Assign(string key, ILookup idMaps) { DeleteBy(key, idMaps); _unitWork.BatchAdd((from sameVals in idMaps from value in sameVals select new Relevance { Key = key, FirstId = sameVals.Key, SecondId = value, OperateTime = DateTime.Now }).ToArray()); _unitWork.Save(); } /// /// 删除关联 /// /// 关联标识 /// 关联的<firstId, secondId>数组 public void DeleteBy(string key, ILookup idMaps) { foreach (var sameVals in idMaps) { foreach (var value in sameVals) { _unitWork.Delete(u => u.Key == key && u.FirstId == sameVals.Key && u.SecondId == value); } } } /// /// 取消关联 /// /// 关联的类型,如"UserResource" /// The first identifier. /// The sec ids. public void UnAssign(string type, string firstId, string[] secIds) { DeleteBy(type, secIds.ToLookup(u =>firstId)); } public void DeleteBy(string key, params string[] firstIds) { _unitWork.Delete(u => firstIds.Contains(u.FirstId) && u.Key == key); } /// /// 添加新的关联 /// /// 关联标识 /// 关联的<firstId, secondId>数组 public void AddRelevance(string key, ILookup idMaps) { DeleteBy(key, idMaps); _unitWork.BatchAdd((from sameVals in idMaps from value in sameVals select new Relevance { Key = key, FirstId = sameVals.Key, SecondId = value, OperateTime = DateTime.Now }).ToArray()); _unitWork.Save(); } } }