Метод расширения на Entity Framework 6 в ASP.NET MVC 5 на платформе .NET Framework 4

#c# #.net #entity-framework-6

Вопрос:

Я настраиваю старое веб-приложение, построенное на ASP.NET MVC 5, .NET 4.6, Entity Framework 6.

Я использовал Entity Framework, чтобы построить его с использованием подхода, основанного на базе данных. Я не использовал уровень DDD / Репозитория / сервисов (это простая архитектура).

Мне нужно это сделать:

  • Я не хочу массово обновлять записи базы данных
  • Каждый раз, когда я создаю/редактирую/перечисляю PERSON_ENTITY элемент или набор данных, я запускаю для него метод
  • Например, поверните в верхний регистр FIRSTNAME и LASTNAME свойства/поля или округлите DAYS_FROM_LAST_LOGIN
  • Я не хочу дублировать код в действии создания/редактирования/списка PERSON_ENTITY контроллера
 namespace Webapplication4.Controllers
{
    [Authorize]
    public class PersonsController : Controller
    {
        private CS_Webapplication4_Entities db = new CS_Webapplication4_Entities();
 
        public ActionResult Index()
        {
            var myDataset = db.PERSON_ENTITY ;
            
            //----------------------------------** 1° point **
            foreach(PERSON_ENTITY myPerson in myDataset)
            {
                myPerson.Firstname = Utils.Upperize(myPerson.Firstname);
                myPerson.Lastname = Utils.Upperize(myPerson.Lastname);
            }

            return View(myDataset.ToList());
        }
 
        public ActionResult Details(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            PERSON_ENTITY myPerson = db.PERSON_ENTITY.Find(id);

            if (myPerson == null)
            {
                return HttpNotFound();
            }

            ////---------------------------------- 2° point
            myPerson.Firstname = Utils.Upperize(myPerson.Firstname);
            myPerson.Lastname = Utils.Upperize(myPerson.Lastname);

            return View(myPerson);
        }
        
        public ActionResult Create()
        {
            //...
            return View();
        }
         
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "...")] PERSON_ENTITY myPerson)
        {
            if (ModelState.IsValid)
            {
                //3° point
                myPerson.Firstname = Utils.Upperize(myPerson.Firstname);
                myPerson.Lastname = Utils.Upperize(myPerson.Lastname);

                db.PERSON_ENTITY.Add(myPerson);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            //...
            return View(myPerson);
        }
         
        public ActionResult Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            PERSON_ENTITY myPerson = db.PERSON_ENTITY.Find(id);

            if (myPerson == null)
            {
                return HttpNotFound();
            }

            //...
            //4° point
            myPerson.Firstname = Utils.Upperize(myPerson.Firstname);
            myPerson.Lastname = Utils.Upperize(myPerson.Lastname);

            return View(myPerson);
        }
         
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit([Bind(Include = "...")] PERSON_ENTITY myPerson)
        {
            //5° point
            myPerson.Firstname = Utils.Upperize(myPerson.Firstname);
            myPerson.Lastname = Utils.Upperize(myPerson.Lastname);

            if (ModelState.IsValid)
            {
                db.Entry(myPerson).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            //...
            
            return View(myPerson);
        }
    }
}
 

Я читал, что можно расширить Entity Framework, добавив некоторые методы расширения. Если это возможно, я могу написать что-то вроде этого:

 public static AppIdentityDbContext MyExtension()  
{
    var MyCustomizedMethod = new SOMETHING() {
                    if EntityType.Equals(PERSON_ENTITY)
                    {
                        PERSON_ENTITY.Firstname = Utils.Upperize(myPerson.Firstname);
                        PERSON_ENTITY.Lastname = Utils.Upperize(myPerson.Lastname);
                    }
                
    };

    return new AppIdentityDbContext().AddSomething(MyCustomizedMethod);;
}
 

Пожалуйста, кто-нибудь может мне помочь в этом?

Можно ли расширить Entity Framework, как описано выше?

Спасибо всем

Комментарии:

1. Прописные буквы имени и фамилии могут быть очень легко выполнены в методе настройки этих свойств — методы расширения не требуются …

Ответ №1:

Что ж, ты почти сделал это. Сначала определите статический класс для расширений контекста и добавьте свой новый пользовательский метод расширения

  public static class AppIdentityDbContextExtensions()  
 {
    public static bool AddSomething(this AppIdentityDbContext appIdentityDbContext )
    {
        <your-code-here>
    };
 }
 

А затем вызовите новый метод расширения следующим образом

     return new AppIdentityDbContex().AddSomething();