加入预测{n 44}时nHibernate NotSupportedException

时间:2018-02-26 16:10:56

标签: c# nhibernate

我们遇到了NHibernate LINQ提供程序的意外行为。我们尝试连接两个实体并选择一个投影,每个投影有时会产生NotSupportedException

如果在查询的from子句中定义了投影,则可以编译查询。例如:

var query = from team in session.Query<TeamEntity>()
                    .Select(team => new TeamModel
                    {
                        TeamId = team.Id,
                        Shortname = team.Shortname
                    })
                        join player in session.Query<PlayerEntity>()
                            on team.TeamId equals player.TeamId
                        select new PlayerModel
                        {
                            PlayerId = player.Id,
                            TeamId = team.TeamId,
                            Shortname = team.Shortname,
                            Name = player.Name
                        };

            query.ToList();

上面的语句编译成以下SQL语句(替换生成的名称):

select player.Player_Id, team.Team_Id, team.Shortname, player.Name
from DalTest_Team team, DalTest_Player player 
where player.Team_Id=team.Team_Id

如果在查询的join子句中定义了投影,则无法编译查询 。例如:

var query = from player in session.Query<PlayerEntity>()
                        join team in session.Query<TeamEntity>()
                .Select(team => new TeamModel
                {
                    TeamId = team.Id,
                    Shortname = team.Shortname
                })
                    on player.TeamId equals team.TeamId
                        select new PlayerModel
                        {
                            PlayerId = player.Id,
                            TeamId = team.TeamId,
                            Shortname = team.Shortname,
                            Name = player.Name
                        };

            query.ToList();

我们不明白为什么投影是fromjoin语句的一部分的一部分会有所不同。这种行为有任何技术原因吗?

您可能会问为什么我们希望稍后根据投影定义投影和连接。在我们希望的情况下,我们希望解耦我们的应用程序的业务领域。这些部分不应该了解彼此的实体。此外,可能涉及两个以上的业务领域,这意味着from子句中的投影方法并不能完全解决我们的问题。

  1. 这是一个错误吗?
  2. 还有其他方法可以实现我们的目标吗?
  3. 以下GitHub存储库中有一个功能齐全的单元测试项目。可以使用NuGet恢复所有必需的依赖项,包括SQLite。

    https://github.com/claudiobernasconi/NHibernateProjectionJoins

0 个答案:

没有答案