C# 如何使用Fluent NHibernate访问视图?

C# 如何使用Fluent NHibernate访问视图?,c#,orm,fluent-nhibernate,C#,Orm,Fluent Nhibernate,我的web应用程序使用六个表,当用户通过系统时,每个表都会被填充。为了进行统计分析,我编写了一个数据库视图,将这些表展平到一个视图中 视图正在工作,但是,我想围绕视图创建自动化一些测试 我这样做的想法是为视图创建一个模型/地图和存储库——仅使用列表操作。我当前的实现不起作用 这是我的存储库: namespace FunctionalTests.SpssView { public class SpssRepository { private readonly ISe

我的web应用程序使用六个表,当用户通过系统时,每个表都会被填充。为了进行统计分析,我编写了一个数据库视图,将这些表展平到一个视图中

视图正在工作,但是,我想围绕视图创建自动化一些测试

我这样做的想法是为视图创建一个模型/地图和存储库——仅使用列表操作。我当前的实现不起作用

这是我的存储库:

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();