gpt4 book ai didi

nHibernate 连接多个表并使用 AliasToBean 转换器

转载 作者:行者123 更新时间:2023-12-03 12:15:21 29 4
gpt4 key购买 nike

我有一个非常基本的需求,即从数据库中获取一些数据并返回一个 DTO。我发现使用 nHibernate 连接多个表和“投影”可以说,到 DTO 是相当多的代码。在查看了几个示例后,大多数示例都不起作用,给我留下了一个带有空值的 DTO,我想出了以下内容,并想知道您的 nHibernate ninja 是否可以告诉我是否有更好的方法。

public IOpenIdUser GetOpenIdUser(string claimedIdentifier, IOpenIdUser openIdUserDto)
{
User user = null;
OpenIdUser openIdUser = null;
Profile profile = null;
UserType userType = null;


return
SessionWrapper.Session.QueryOver(() => user).JoinAlias(() => user.Profiles, () => profile).
JoinAlias(() => user.OpenIdUsers, () => openIdUser).JoinAlias(() => user.UserType, () => userType)
.Where(() => user.UserName == claimedIdentifier)
.SelectList(l => l
.Select(x => openIdUser.OpenIdUserId).WithAlias(() => openIdUser.OpenIdUserId)
.Select(x => user.UserId).WithAlias(() => openIdUserDto.UserId)
.Select(x => openIdUser.OpenIdClaimedIdentifier).WithAlias(
() => openIdUserDto.ClaimedIdentifier)
.Select(x => openIdUser.OpenIdFriendlyIdentifier).WithAlias(
() => openIdUserDto.FriendlyIdentifier)
.Select(x => openIdUser.OpenIdEndPoint).WithAlias(
() => openIdUserDto.OpenIdEndPoint)
.Select(x => user.UserName).WithAlias(() => openIdUserDto.UserName)
.Select(x => userType.Type).WithAlias(() => openIdUserDto.UserType)
.Select(x => profile.DisplayName).WithAlias(() => openIdUserDto.DisplayName)
.Select(x => profile.EmailAddress).WithAlias(() => openIdUserDto.EmailAddress)
.Select(x => openIdUser.DateCreated).WithAlias(() => openIdUserDto.DateCreated)
.Select(x => openIdUser.LastUpdated).WithAlias(() => openIdUserDto.LastUpdated)
.Select(x => openIdUser.UsageCount).WithAlias(() => openIdUserDto.UsageCount)
).TransformUsing(Transformers.AliasToBean<OpenIdUserDto>()).Future<OpenIdUserDto>().Single();
}

此方法位于我的 UserRepository 中并由我的 UserService 调用。请不要说这实际上有效,我只是认为对于这样一个简单的任务来说这太过分了。另请注意,我是新手,所以如果这段代码很糟糕,我提前道歉。

最佳答案

如果您使用 Queryover 那么这是唯一的方法。

如果您真的认为更少的代码行更可取,更直观,或者更适合您,那么您可以执行以下任一操作:-

  • 创建一个数据库 View 并为该 View 创建映射文件mutable="false"在您的类定义中并使用 protected set;关于您的类属性
  • 改用 LINQ 提供程序,例如.Query (看
    blog post更多信息)
  • 关于nHibernate 连接多个表并使用 AliasToBean 转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9229814/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com