我的第一个Stack Overflow问题,这里有......
我的系统有三个数据库: MyAdminDb , MyAuditDb1 和 MyAuditDb2
MyAdminDb 有一个User表,其中包含Audits 1& A中用户的基本信息。 2.任何特定于审计的用户信息分别保存在 MyAdminDb , Audit1 和 Audit2 中的单独表中,外键密钥到基本用户表通过UserId
在我的解决方案中,我有以下项目
MySystem.Core
MySystem.Core.Data
MySystem.MyAudit1.Core
MySystem.MyAudit1.Core.Data
MySystem.MyAudit2.Core
MySystem.MyAudit2.Core.Data
我在MySystem.Core中有一个User实体
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; }
}
和MySystem.Core.Data中的流畅NHibernate Map
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区域的Web项目中有一个控制器操作,它执行此操作:
[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);
}
GetAll调用中的User实体是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);
}
我使用Admin Session工厂密钥为MyAdminDb创建会话