gpt4 book ai didi

c# - 如何使用 Griffin-Framework Data-Mapper 从数据库映射数据

转载 作者:太空宇宙 更新时间:2023-11-03 15:14:24 24 4
gpt4 key购买 nike

我有两个表:用户和用户类型:

CREATE TABLE [dbo].[User](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NULL,
[UserTypeId] [int] NOT NULL
)
CREATE TABLE [dbo].[UserType](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NULL
)

我的模型类:

public class User
{
public int Id { get; set; }
public string Name { get; set; }
public UserType UserType { get; set; }
}
public class UserType
{
public int Id { get; set; }
public string Name { get; set; }
}

我的查询:

SELECT 
U.Id
, U.Name
, UT.Id AS [UserTypeId]
, UT.Name AS [UserTypeName]
FROM dbo.User AS F
INNER JOIN dbo.UserType AS UT ON U.UserTypeId = UT.Id
ORDER BY U.Id

还有我的映射器类:

public class UserMapper : CrudEntityMapper<User>
{
public UserMapper() : base("User")
{
Property(x => x.UserType)
.ColumnName("UserTypeId")
.ToPropertyValue((x) => new UserType { Id = (int)x });
Property(x => x.UserType)
.ColumnName("UserTypeName")
.ToPropertyValue((x) => new UserType { Name = (string)x });
}
}

当我尝试执行命令时,我得到了没有 userType.Id 的用户列表(Id 始终 = 0)。我需要用数据填充我的 User 和子 UserType 类。

请告诉我我做错了什么。

cmd.ToList<User>();

附言。我正在使用 Griffin.Framework用于映射

最佳答案

我不熟悉 Griffin 本身,但很明显问题是您有两个单独的 UserType 映射。每个映射都会创建一个全新的对象,该对象会覆盖 User 对象上的 UserType 成员。根据首先映射的列,您将始终获得一个只有一个属性集的 UserType 对象。

查看 FluentPropertyMapping 的来源,似乎没有将多列映射到一列的选项。一个潜在的解决方法,它取决于对映射嵌套属性的支持:

public class User
{
public User()
{
UserType = new UserType();
}

public int Id { get; set; }
public string Name { get; set; }
public UserType UserType { get; set; }
}

在你的映射中:

public class UserMapper : CrudEntityMapper<User>
{
public UserMapper() : base("User")
{
Property(x => x.UserType.Id)
.ColumnName("UserTypeId");
Property(x => x.UserType.Name)
.ColumnName("UserTypeName");
}
}

关于c# - 如何使用 Griffin-Framework Data-Mapper 从数据库映射数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39585301/

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