2015년 9월 13일 일요일

EF 6 Stored Procedure



단일값 반환
  1. var param = new SqlParameter { ParameterName = "idx", Value = 1 };
  2. var result = context.Database.SqlQuery("ProcedureName @idx", param);
  3. return result.FirstOrDefaultAsync().Result;

리스트 반환
  1. context.Database.SqlQuery("GetPerson").AsQueryable();

Output parameter
  1. var param = new SqlParameter { ParameterName = "idx", Value = 1 };
  2. var output_param = new SqlParameter { ParameterName = "ResultCode", Value = 0, Direction = ParameterDirection.Output };
  3. var result = context.Database.SqlQuery("GetPersons @idx, @ResultCode out", param, output_param).AsQueryable();
  4. var resultCode = (int)output_param.Value;

위도(Latitude)와 경도(Longitude) 값을 이용한 거리계산



  1. public double GetDistance(double lat1, double lon1, double lat2, double lon2)
  2. {
  3. double theta, dist;
  4. theta = lon1 - lon2;
  5. dist = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + Math.Cos(deg2rad(lat1))
  6. * Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta));
  7. dist = Math.Acos(dist);
  8. dist = rad2deg(dist);
  9.  
  10. dist = dist * 60 * 1.1515;
  11. dist = dist * 1.609344; // 단위 mile 에서 km 변환.
  12. dist = dist * 1000.0; // 단위 km 에서 m 로 변환
  13.  
  14. return dist;
  15. }
  16. ///
  17. /// 주어진 Degree 값을 Radian 값으로 변환
  18. ///
  19. /// Degree
  20. /// Radian
  21. private double deg2rad(double deg)
  22. {
  23. return (double)(deg * Math.PI / (double)180d);
  24. }
  25. ///
  26. /// 주어진 Radian 값을 Degree 값으로 변환
  27. ///
  28. /// Radian value
  29. /// Degree
  30. private double rad2deg(double rad)
  31. {
  32. return (double)(rad * (double)180d / Math.PI);
  33. }