Since I am new to MVC and the Entity Framework, I have been struggling to grasp the concept of creating useful Data and Service layers. I have come across a scenario where I believe my code has become very redundant:   Data Access Layer:public static class DeploymentOrderDataLayer    {     public static usr_OrderFulfillment GetScannedItem(string orderNumber, string itemNumber)        {            using (TPGContext context = new TPGContext())            {                return context.usr_OrderFulfillment.FirstOrDefault(x => x.SOPNUMBE == orderNumber && x.ItemNumber == itemNumber);            }        }    public static void UpdateScannedItem(string orderNumber, string itemNumber, string user, string serialNumber)        {            using (TPGContext context = new TPGContext())            {                var result = context.usr_OrderFulfillment.FirstOrDefault(x => x.SOPNUMBE == orderNumber && x.ItemNumber == itemNumber);                result.IsFulfilled = true;                result.FulfilledBy = user;                result.DateFulfilled = DateTime.Now;                if (!string.IsNullOrEmpty(serialNumber))                {                    result.SerialNumber = serialNumber;                }                context.SaveChanges();            }        }}I call all of my Data Layers through a BusinessLayer, which handles my business logic:public class DeploymentOrderBusinessLayer    {    public static void UpdateScannedItem(string orderNumber, string itemNumber, string user, string serialNumber = )            {                    var itemInfo = DeploymentOrderDataLayer.GetScannedItem(orderNumber, itemNumber);                    if (itemInfo == null) throw new BusinessException(Item number not found.);                    if (itemInfo.IsFulfilled) throw new BusinessException(string.Format(Item already fulfilled by {0}, itemInfo.FulfilledBy));                DeploymentOrderDataLayer.UpdateScannedItem(orderNumber, itemNumber, user, serialNumber);            }   }The BusinessLayer then gets called from my DeploymentOrder Controller: try        {          DeploymentOrderBusinessLayer.UpdateScannedItem(orderNumber, itemNumber, User.Identity.Name);        }        catch (BusinessException ex)        {            ViewBag.AlertMessage = ex.Message;        }A couple things that bug me:I'm calling GetScannedItem in my business layer so that I can do my validation first, before anything gets updated.  When I'm ready to update, I have to re-query the database again, so that I can update my context.  This extra hit to the database seems unnecessary to me, but I'm not sure how to fix it.  The DeploymentOrderDataLayer is fine for my DeploymentOrderController, but useless for any other controllers that might need to access similar data.  I would like my Data Layers to be more dynamic.  Any suggestions are appreciated.  
Building a better Data Access Layer Class
c#;asp.net mvc 4;asp.net mvc