Можно ли писать запросы EF в отдельном файле классов внутри папки моделей вместо записи в самом контроллере.
Потому что я видел в msdn запись всех запросов EF в самом контроллере. В то же время я также прочитал в msdn, что контроллер должен быть коротким.
При использовании моделей я использую этот подход:
В контроллере:
public JsonResult SaveStorageLocation(StorageLocations objStorageLocation)
{
int Result = 0;
try
{
StorageLocationModel objStorageLocationModel = new StorageLocationModel();
if (objStorageLocation.Id == Guid.Empty)
{
Result = objStorageLocationModel.AddStorageLocation(objStorageLocation, SessionUserId);
}
else
{
Result = objStorageLocationModel.UpdateStorageLocation(objStorageLocation, SessionUserId);
}
}
catch (Exception ex)
{
Result = (int)MethodStatus.Error;
}
return Json(Result, JsonRequestBehavior.AllowGet);
}
В классе Model:
public int AddStorageLocation(StorageLocations objStorageLocation, Guid CreatedBy)
{
MethodStatus Result = MethodStatus.None;
int DuplicateRecordCount = db.StorageLocations.Where(x => x.Location.Trim().ToLower() == objStorageLocation.Location.Trim().ToLower()).Count();
if (DuplicateRecordCount == 0)
{
objStorageLocation.Id = Guid.NewGuid();
objStorageLocation.CreatedBy = CreatedBy;
objStorageLocation.CreatedOn = DateTime.Now;
objStorageLocation.ModifiedBy = CreatedBy;
objStorageLocation.ModifiedOn = DateTime.Now;
objStorageLocation.Status = (int)RecordStatus.Active;
db.StorageLocations.Add(objStorageLocation);
db.SaveChanges();
Result = MethodStatus.Success;
}
else
{
Result = MethodStatus.MemberDuplicateFound;
}
return Convert.ToInt32(Result);
}
public int UpdateStorageLocation(StorageLocations objStorageLocationNewDetails, Guid ModifiedBy)
{
MethodStatus Result = MethodStatus.None;
int DuplicateRecordCount =
db.StorageLocations.
Where(x => x.Location == objStorageLocationNewDetails.Location &&
x.Id != objStorageLocationNewDetails.Id).Count();
if (DuplicateRecordCount == 0)
{
StorageLocations objStorageLocationExistingDetails = db.StorageLocations.Where(x => x.Id == objStorageLocationNewDetails.Id).FirstOrDefault();
if (objStorageLocationExistingDetails != null)
{
objStorageLocationExistingDetails.Location = objStorageLocationNewDetails.Location;
objStorageLocationExistingDetails.ModifiedBy = ModifiedBy;
objStorageLocationExistingDetails.ModifiedOn = DateTime.Now;
objStorageLocationExistingDetails.Status = (int)RecordStatus.Active;
db.SaveChanges();
Result = MethodStatus.Success;
}
}
else
{
Result = MethodStatus.MemberDuplicateFound;
}
return Convert.ToInt32(Result);
}
Или лучше написать весь код в самом контроллере?