Мой первый вопрос переполнения стека, здесь идет ...
У меня есть система, которая имеет три базы данных: MyAdminDb , MyAuditDb1 и MyAuditDb2
MyAdminDb имеет таблицу пользователей, которая содержит базовую информацию для пользователей в аудитах 1 и 2. Любая информация о пользователях, относящаяся к любому аудиту, хранится в отдельных таблицах в MyAdminDb , Audit1 и Audit2 соответственно, внешний ключ, привязанный к базовой таблице User с помощью UserId
В моем решении у меня есть следующие проекты
MySystem.Core
MySystem.Core.Data
MySystem.MyAudit1.Core
MySystem.MyAudit1.Core.Data
MySystem.MyAudit2.Core
MySystem.MyAudit2.Core.Data
У меня есть сущность User в MySystem.Core
public class User : KeyedEntity<string>
{
[StringLength(255)]
public virtual string DisplayName { get; set; }
[StringLength(100)]
public virtual string Forenames { get; set; }
[StringLength(100)]
public virtual string Surname { get; set; }
[StringLength(255)]
public virtual string EmailAddress { get; set; }
[StringLength(50)]
public virtual string Role { get; set; }
public virtual bool IsAuthorised { get; set; }
}
и свободная карта NHibernate в MySystem.Core.Data
public class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.Id, "UserId")
.GeneratedBy.Assigned()
.CustomType("String");
Map(x => x.DisplayName).CustomType("String");
Map(x => x.Forenames).CustomType("String");
Map(x => x.Surname).CustomType("String");
Map(x => x.EmailAddress).CustomType("String");
Map(x => x.Role);
Map(x => x.IsAuthorised);
}
}
В MySystem.MyAudit1.Core, у меня есть аудитопределенная сущность User, которая наследуется от базового базового класса следующим образом:
public class User: MySystem.Core.User
{
public virtual Trust Trust { get; set; }
public virtual bool? GeneratedGuid { get; set; }
}
со своим собственным файлом сопоставления в MySystem.MyAudit1.Data
public class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.Id, "UserId")
.GeneratedBy.Assigned()
.CustomType("String");
Map(x => x.DisplayName).CustomType("String");
Map(x => x.Forenames).CustomType("String");
Map(x => x.Surname).CustomType("String");
Map(x => x.EmailAddress).CustomType("String");
Map(x => x.Role);
Map(x => x.IsAuthorised);
Map(x => x.GeneratedGuid);
References(x => x.Trust);
}
}
У меня есть действие контроллера в моей сетипроект, в области MyAudit1 MVC, который делает это:
[HttpGet]
public virtual ActionResult Index()
{
var users = _readRepository.GetAll<User>();
var listOfUserViewModel = new List<ViewModel>();
foreach (var user in users)
{
var viewModel = new ViewModel();
ModelToViewModel(user, viewModel, true);
listOfUserViewModel.Add(viewModel);
}
return View(listOfUserViewModel);
}
Сущность User в вызове GetAll является производной сущностью в проекте MyAudit1.Использование этого не возвращает никаких записей из базы данных.Однако, если я поменяю сущность User с MyAudit1 на базовую сущность из проекта Core, будут возвращены все записи из таблицы.
var users = _readRepository.GetAll<Core.User>();
Мой вопрос заключается в том, нужно ли делать классы, производные от базовых классов в других проектах.быть по-разному отображены для NHibernate, чтобы получить данные обратно?
Редактировать: создание фабрики моего сеанса в конструкторе контроллера:
public UserController(IWindsorContainer iocContainer)
{
var sessionFactory = iocContainer.Resolve<ISessionFactory>(Constants.AdminSessionFactoryKey);
var session = sessionFactory.OpenSession();
_readRepository = new NHibernateReadRepository(session);
_unitOfWork = new NHibernateUnitOfWork(session);
}
Я использую ключ фабрики сеанса администратора для создания сеансадля MyAdminDb