В настоящее время я работаю над приложением и ASP.NET MVC, в котором у меня есть User
сущность, как следующим образом:Как карта и ссылки на объекты из других источников данных с NHibernate
public class User
{
public virtual int Id { get; protected set; }
public virtual string Name { get; protected set; }
public virtual string Role { get; protected set; }
public virtual Location Location { get; protected set; }
}
Где место просто так просто :
public class Location
{
public virtual string Id { get; protected set; }
public virtual string Building { get; protected set; }
public virtual string City { get; protected set; }
public virtual string Region { get; protected set; }
}
Мое осложнение возникает потому, что я хочу, чтобы заполнить User
из Active Directory, а не базы данных. Кроме того, несколько классов сохраняли в базе данных ссылку на пользователя как свойство. У меня есть ADUserRepository
для извлечения, но я не знаю, как интегрировать этих пользователей в мой графа объектов, когда все остальные управляются NHibernate.
Есть ли способ, чтобы NHibernate сохранял только идентификатор для User
без его внешнего ключа к таблице Users? Могу ли я сопоставить его как компонент для достижения этого? Я также посмотрел на реализацию IUserType
, чтобы сделать перевод. Таким образом, он будет сопоставляться с простым полем, и ADUserRepository
может быть помещен в цепочку для разрешения сохраненного идентификатора. Или я пытаюсь взломать что-то, что не реально? Это мой первый раз с NHibernate, поэтому я ценю любые идеи или решения, которые вы можете дать. Благодарю.
Update
Оказывается, мое лучшее решение по этому вопросу будет сопоставить пользователя с IUserType и вводят (предпочтительно с StructureMap) услугу для заполнения объекта до его возвращается. В этом свете есть несколько вопросов, которые касаются этой темы, в основном предполагающей необходимость использования пользовательского ByteCodeProvider. Должен ли я все же сделать это, чтобы IUserType мог взять параметризованный конструктор или сделать комментарии здесь: NHibernate.ByteCode.LinFu.dll For NHibernate 3.2 сделать разницу?
Если пользователь объект имеет соответствующую таблицу с информацией, которая гидратированный от активного каталога определенных свойств (т.е. некартированного), то это, безусловно, можно с помощью рамки EventListeners NHibernate в { Ns: NHibernate.Event} или IInterceptor {Ns: NHibernate}. – kalki
На данный момент у пользователей нет собственной таблицы. Я экспериментировал с этим подходом, реализуя PostLoadEventListener, но для каждого объекта, который ссылается на пользователя, потребуется логика. Я предпочел бы скрыть, как пользователь возвращается от этих объектов. – user1325699
вам не нужно будет предоставлять вам интерфейс, чтобы идентифицировать объект с пользователем как членом. IUserType, безусловно, является опцией, в которой я сомневаюсь, что это всегда была явная спецификация, необходимая для hbm (не очень хорошо разбирающаяся с беглостью, поэтому не знаю об этом), я полагаю, что каждый из его яда! – kalki