標籤:
一對多映射關係
/// <summary> /// 一對多串連查詢 /// </summary> /// <typeparam name="FirstT">主鍵表實體類型</typeparam> /// <typeparam name="SecondT">外鍵表實體類型</typeparam> /// <typeparam name="ReturnT">返回的實體類型(一般如果實體中存在映射關係的時候傳回型別與主鍵表類型基本相同)</typeparam> /// <param name="sqlStr">串連查詢的sql</param> /// <param name="ForeignKeyName">主鍵表實體中的的外鍵表集合名稱</param> /// <param name="Name">外鍵表中的外鍵名</param> /// <returns></returns> public static List<FirstT> SelectOneToMore<FirstT, SecondT, ReturnT>(string sqlStr, string ForeignKeyName, string Name) where FirstT : IDataEntity, new() { using (var conn = ConnectionFactory.Connection) { List<FirstT> list = new List<FirstT>(); var lookUp = new Dictionary<int, FirstT>(); list = conn.Query<FirstT, SecondT, FirstT>(sqlStr, (firstT, secondT) => { FirstT t; if (!lookUp.TryGetValue(firstT.ID, out t)) { lookUp.Add(firstT.ID, t = firstT); } foreach (var item in firstT.GetType().GetProperties()) { if (item.Name == ForeignKeyName) { var a = item.GetValue(firstT, null) as HashSet<SecondT>; a.Add(secondT); } } //t.GetType().GetMember(ForeignKeyName) return firstT; }, null, null, true, Name, null, null).ToList(); return list; } }
一對一映射關係
/// <summary> /// 一對一連結查詢 /// </summary> /// <typeparam name="FirstT">主鍵表類型</typeparam> /// <typeparam name="SecondT">外鍵表類型</typeparam> /// <typeparam name="ReturnT">傳回值類型</typeparam> /// <param name="sqlStr">sql</param> /// <param name="ForeignKeyName">主鍵表實體中的的外鍵表集合名稱</param> /// <param name="Name">外鍵表中的外鍵名</param> /// <returns></returns> public static List<FirstT> SelectOneToOne<FirstT, SecondT, ReturnT>(string sqlStr, string ForeignKeyName, string Name) where FirstT : IDataEntity, new() where SecondT : class,IDataEntity, new() { using (var conn = ConnectionFactory.Connection) { List<FirstT> list = new List<FirstT>(); var lookUp = new Dictionary<int, FirstT>(); list = conn.Query<FirstT, SecondT, FirstT>(sqlStr, (firstT, secondT) => { foreach (var item in firstT.GetType().GetProperties()) { if (item.Name == ForeignKeyName) { item.SetValue(firstT, item.GetValue(firstT, null)); } } //t.GetType().GetMember(ForeignKeyName) return firstT; }, null, null, true, Name, null, null).ToList(); return list; } }
Dapper連結查詢擴充