asp.net mvc: как создать пользовательскую привязку для моделей при использовании LINQ to Entities - PullRequest
1 голос
/ 18 ноября 2009

В моей базе данных есть несколько таблиц, которые имеют общие столбцы: изменено, дата изменения и т. Д. Не в каждой таблице есть эти столбцы. Мы используем LINQ to Enties для генерации

Я хотел бы создать собственный класс связывателя, который может обрабатывать автоматическое связывание этих полей. Есть ли способ сделать это без наличия настраиваемого класса привязки для каждого класса сущности?

Вот код, который у меня есть:

В global.asax.cs, Application_Start ():

  ModelBinders.Binders.Add(typeof(Foo),new FooBinder());

Затем в FooBinder.cs:

public override Object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
  var obj = (Foo)base.BindModel(controllerContext, bindingContext);
  var user = controllerContext.HttpContext.User.Identity;
  obj.modified_by = user.Name;
  obj.modified_date = DateTime.Now;
  return obj;
}

Есть ли способ обобщить это, чтобы он мог обрабатывать несколько типов?

Ответы [ 2 ]

1 голос
/ 18 ноября 2009

Мы делаем это в хранилище, а не в подшивке. У нас есть интерфейс с общими полями (изменено). Мы реализуем интерфейс в частичных классах, которые мы кодируем для наших объектов, используя шаблон T4.

0 голосов
/ 18 ноября 2009

Вы можете использовать отражение, чтобы установить поля по имени, чтобы вы могли выполнять foreach поверх имен свойств. Это не имеет большого значения, так как связыватель модели использует само отражение, чтобы в любом случае добраться до свойств. Затем вы можете просто зарегистрировать связыватель для каждого из «общих» типов - что также нормально делать с использованием отражения, например, проверяя, что у сущности есть все необходимые поля - так что это работает, даже если вы добавляете новые такие сущности.

Просто сделайте так, чтобы ваш связыватель вызывал по умолчанию, а затем обновите поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...