Аудит данных в NHibernate и SqlServer

Отображение его работы «Моя кнопка местоположения» Нижний правый угол на MapView

XML

<com.google.android.gms.maps.MapView
    android:id="@+id/mapView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

JAVA

private MapView mMapView;

mMapView = (MapView) findViewById(R.id.mapView);

mMapView.getMapAsync(new OnMapReadyCallback() {
    @Override
    public void onMapReady(final GoogleMap mMap) {
        if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
            mMap.setMyLocationEnabled(true);
        }

        if (mMapView != null && mMapView.findViewById(Integer.parseInt("1")) != null) {
            View locationButton = ((View) mMapView.findViewById(Integer.parseInt("1")).getParent()).findViewById(Integer.parseInt("2"));
            RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) locationButton.getLayoutParams();
            layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, 0);
            layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
            layoutParams.setMargins(0, 0, 20, 20);
        }
    }
});
15
задан Ryan Gates 1 October 2013 в 12:24
поделиться

6 ответов

Для NHibernate 2.0 необходимо также посмотреть Слушатели События . Это эволюция интерфейса IInterceptor, и мы используем их успешно для аудита.

14
ответ дан 1 December 2019 в 02:10
поделиться

[РЕДАКТИРОВАНИЕ]

Сообщение выпуск NH2.0, посмотрите на Слушателей События, как предложено ниже. Мой ответ устарел.

<час>

IInterceptor является рекомендуемым способом изменить любые данные в nhibernate неразрушающим способом. Это также полезно для дешифрования / шифрование данных без Вашего кода приложения, бывшего должного знать.

Включает базу данных, перемещают ответственность входа (беспокойство приложения) в к уровню DBMS, который эффективно связывает Ваше решение для входа Вашей платформы базы данных. Путем инкапсуляции механики аудита в слое постоянства Вы сохраняете независимость платформы и кодируете транспортабельность.

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

5
ответ дан 1 December 2019 в 02:10
поделиться

Я предпочитаю, чтобы CodeProject обратились к Вам упомянутый.

Одна проблема с триггерами базы данных состоит в том, что это не оставляет Вас никаким выбором, кроме как использовать Интегрированную защиту вместе с ActiveDirectory как доступ к Вашему SQL Server. Причина этого состоит в том, что Ваше соединение должно наследовать идентификационные данные пользователя, который инициировал соединение; если Ваше приложение будет использовать именованную учетную запись "sa" или другие учетные записи пользователей, то "пользовательское" поле только отразит "sa".

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

3
ответ дан 1 December 2019 в 02:10
поделиться

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

Однако один очевидный недостаток, который заслуживает выделения, - то, что этот подход будет только контролировать изменения данных, внесенные с помощью Вашего приложения. Любые прямые модификации данных, такие как специальные сценарии SQL, которые Вы, возможно, должны выполнить время от времени (это всегда происходит!) не будет контролироваться, если Вы не помните выполнять контрольные вставки таблицы одновременно.

3
ответ дан 1 December 2019 в 02:10
поделиться

Как совершенно другой подход, Вы могли использовать шаблон "декоратор" со своими репозиториями.

Говорят, что я имею

public interface IRepository<EntityType> where EntityType:IAuditably
{ 
    public void Save(EntityType entity);
}

Затем у нас был бы наш NHibernateRepository:

public class NHibernateRepository<EntityType>:IRepository<EntityType>
{
   /*...*/
   public void Save ( EntityType entity )
   {
       session.SaveOrUpdate(entity);
   }
}

Затем у нас мог быть Репозиторий Аудита:

public class AuditingRepository<EntityType>:IRepository<EntityType>
{
   /*...*/
   public void Save ( EntityType entity )
   {
       entity.LastUser = security.CurrentUser;
       entity.LastUpdate = DateTime.UtcNow;
       innerRepository.Save(entity)
   }
}

Затем с помощью Платформы МОК (StructureMap, замок Windsor, NInject) Вы могли создать все это без остальной части Вашего кода каждое знание, что у Вас было продолжение аудита.

, Конечно, то, как Вы контролируете элементы каскадных наборов, является другой проблемой полностью...

2
ответ дан 1 December 2019 в 02:10
поделиться

Я понимаю, что это старый вопрос. Но я хотел бы ответить на этот вопрос в свете новой системы событий в NH 2.0. Слушатели событий лучше подходят для функций, подобных аудиту, чем перехватчики. Айенде написал отличный пример в своем блоге в прошлом месяце. Вот URL-адрес его записи в блоге -

ayende.com/Blog/archive/2009/04/29/nhibernate-ipreupdateeventlistener-amp-ipreinserteventlistener.aspx

3
ответ дан 1 December 2019 в 02:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: