C# 如何使用Fluent NHibernate访问视图?
我的web应用程序使用六个表,当用户通过系统时,每个表都会被填充。为了进行统计分析,我编写了一个数据库视图,将这些表展平到一个视图中 视图正在工作,但是,我想围绕视图创建自动化一些测试 我这样做的想法是为视图创建一个模型/地图和存储库——仅使用列表操作。我当前的实现不起作用 这是我的存储库:C# 如何使用Fluent NHibernate访问视图?,c#,orm,fluent-nhibernate,C#,Orm,Fluent Nhibernate,我的web应用程序使用六个表,当用户通过系统时,每个表都会被填充。为了进行统计分析,我编写了一个数据库视图,将这些表展平到一个视图中 视图正在工作,但是,我想围绕视图创建自动化一些测试 我这样做的想法是为视图创建一个模型/地图和存储库——仅使用列表操作。我当前的实现不起作用 这是我的存储库: namespace FunctionalTests.SpssView { public class SpssRepository { private readonly ISe
namespace FunctionalTests.SpssView
{
public class SpssRepository
{
private readonly ISessionManager _sessionManager;
public SpssRepository(ISessionManager sessionManager)
{
_sessionManager = sessionManager;
}
public IList<Spss> ListFromSpssView()
{
ICriteria criteria = _sessionManager.GetSession().CreateCriteria(typeof(Spss));
return criteria.List<Spss>();
}
}
}
以及映射:
namespace FunctionalTests.SpssView
{
public sealed class SpssMap : ClassMap<Spss>
{
public SpssMap()
{
Id(x => x.StudentId).GeneratedBy.Assigned();
Map(x => x.UPNSCN);
...
}
}
}
namespace FunctionalTests.SpssView
{
公共密封类SpssMap:ClassMap
{
公共SpssMap()
{
Id(x=>x.StudentId).GeneratedBy.Assigned();
Map(x=>x.UPNSCN);
...
}
}
}
我不完全相信ID映射-因为它只是从视图中读取的
这是我的测试:
[Test]
public void ShouldPopulateAndRetrieveFromSpssView()
{
var mockSessionManager = new Mock<ISessionManager>();
mockSessionManager.Setup(x => x.GetSession()).Returns(_session);
var caseRepository = new CaseRepository(mockSessionManager.Object);
var caseList = caseRepository.ListCases();
Assert.That(caseList.Count, Is.EqualTo(2));
var repository = new SpssRepository(mockSessionManager.Object);
var spssList = repository.ListFromSpssView();
Assert.That(spssList.Count, Is.EqualTo(2));
}
[测试]
公共无效信息应从SPSSView()中填充和检索
{
var mockSessionManager=new Mock();
mockSessionManager.Setup(x=>x.GetSession())。返回(\u session);
var caseRepository=新的caseRepository(mockSessionManager.Object);
var caseList=casepository.ListCases();
Assert.That(caseList.Count,Is.EqualTo(2));
var repository=newspssrepository(mockSessionManager.Object);
var spssList=repository.ListFromSpssView();
Assert.That(spssList.Count,Is.EqualTo(2));
}
注意案例列表代码-我把它放在那里,以确保数据库连接正在进行。这部分测试通过了
从spss运行select*;返回两个结果。(我使用的是SQLServer2005FWIW)
因为这不是生产代码,所以我在FunctionalTests visual studio项目中创建了一个新文件夹(我提到这一点,因为在我看来这是它与我的工作存储库之间的主要区别之一。)这是否会有所不同
可以这样测试视图吗?
我是否可以看到正在生成的sql?
我做错了什么
谢谢:)尝试添加:
public SpssMap()
{
Table("myViewBame"); // ADD THIS
Id(x => x.StudentId).GeneratedBy.Assigned();
Map(x => x.UPNSCN);
...
}
要查看生成的SQL,请添加以下内容:
.ShowSql()
例如:
Fluently.Configure().Database(
MsSqlConfiguration.MsSql2005
.ConnectionString(
ConfigurationManager.ConnectionStrings["my"].ConnectionString).ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<MyClass>())
.BuildSessionFactory();
流利。配置()。数据库(
MsSqlConfiguration.MsSql2005
.连接字符串(
ConfigurationManager.ConnectionString[“我的”].ConnectionString.ShowSql()
.Mappings(m=>m.FluentMappings.AddFromAssemblyOf())
.BuildSessionFactory();
谢谢!对表的更改没有任何影响,但是SqlShow让我看到我的存储库根本没有触及数据库。我已经将代码移到了通用项目中,所有这些都很有效。。。明天我要调查到底为什么!再次干杯:)我的荣幸!如果将类命名为视图,则不会有任何区别,但会再次发布,我可能会提供帮助。
Fluently.Configure().Database(
MsSqlConfiguration.MsSql2005
.ConnectionString(
ConfigurationManager.ConnectionStrings["my"].ConnectionString).ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<MyClass>())
.BuildSessionFactory();