带有实体框架的 ASP.NET Core Web API:返回具有关系的对象

油漆盒

我为我糟糕的英语道歉。

我有一个使用实体框架的 ASP.NET Core Web API。对于我的一种方法,我想返回一个具有所有关系(一对一)的对象。

我的UserAccount班级是:

[Table("UserAccount")]
public class UserAccount : BaseClass
{
    // Foreign Keys
    [ForeignKey(nameof(UserAccountType))]
    public int UserAccountTypeId { get; set; } 
    [ForeignKey(nameof(Gender))]
    public int GenderId { get; set; }
    [ForeignKey(nameof(Truck))]
    public int? TruckId { get; set; }

    // Properties
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public string UserName { get; set; }
    [DataType(DataType.EmailAddress)]
    public string Mail { get; set; }
    public string Login { get; set; }
    [DataType(DataType.Password)]
    public string Password { get; set; }

    // Navigation Properties
    [IgnoreDataMember]
    public virtual Gender Gender { get; set; }
    [IgnoreDataMember]
    public virtual UserAccountType UserAccountType { get; set; }
    [IgnoreDataMember]
    public virtual Truck Truck { get; set; }
}

我也使用 DTO 类:

public class UserAccountDto : BaseClassDto
{
    // Foreign Keys
    public int UserAccountTypeId { get; set; }
    public int GenderId { get; set; }
    public int TruckId { get; set; }

    // Properties
    public string LastName { get; set; }
    public string FirstName { get; set; }
    public string UserName { get; set; }
    public string Mail { get; set; }
    public string Login { get; set; }
    public string Password { get; set; }

    // Linked Objects
    public virtual GenderDto Gender { get; set; }
    public virtual UserAccountTypeDto UserAccountTypes { get; set; }
    public virtual TruckDto Trucks { get; set; }
}

我想接收Gender,UserAccountType和 的所有关系对象Truck

我的方法是:

[HttpGet("GetByTruck/{truckId}", Name = "UserAccountByTruckId")]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<ActionResult<UserAccount>> GetByTruckId(int truckId)
{
    if (truckId <= 0) 
        return BadRequest();

    try
    {
        var userAccounts = await _repository.UserAccount.GetByTruckIdAsync(truckId);
        var userAccountsResult = _mapper.Map<IEnumerable<UserAccountDto>>(userAccounts);

        if (userAccountsResult == null) 
            return NotFound();

        return Ok(userAccountsResult);
    }
    catch (Exception ex)
    {
        _logger.LogError($"Something went wrong inside GetById action int UserAccountController : {ex.Message} ");
        return StatusCode(StatusCodes.Status500InternalServerError, "Internal Server Error");
    }
}

在此方法中,该属性包含所有对象,但是当我尝试使用 Dto 类映射结果时,我丢失了关系对象。

所以我只有一个 UserAccount 对象,没有其他对象,如 Gender、UserAccountType 或 Truck。此对象变为 Null。有没有人可以帮助我?

谢谢

油漆盒

谢谢@ranton187 你救了我!希望可以帮助其他人,这是我问题的解决方案。我在映射配置文件中添加了这个:

CreateMap<UserAccount, UserAccountDto>() .ForMember(dto => dto.Genders, opt => opt.MapFrom(x => x.Gender)) .ForMember(dto => dto.UserAccountTypes, opt => opt.MapFrom( x => x.UserAccountType)) .ForMember(dto => dto.Trucks, opt => opt.MapFrom(x => x.Truck));

现在 Gender、UserAccountTypes 和 Truck 对象不再为 null。

感谢你们两位的快速帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

带有实体框架的 ASP.Net Core Web API 使用存储过程有什么好处吗?

具有COM对象的ASP.NET CORE WEB API

带有实体框架和 Linq 的 .Net Core 2.2 web api 无法执行异步任务?

带有实体框架的ASP.NET Core MVC中的索引方法不接受参数

InvalidOperationException:序列不包含任何元素。在带有实体框架的Asp.net Core MVC中

具有外键关系的ASP.NET Core Web API和EF Core模型

带有身份的ASP.NET:实体框架在SaveChanges上引发System.Data.Entity.Core.UpdateException

带有实体框架的 ASP.NET Core - 代码优先迁移不会读取我的环境变量

在带有实体框架核心的ASP.NET Core WebAPI中使用“数据库生成的”处理属性

在 ASP.NET Core Razor 页面中加载带有数据的选项卡(无实体框架)

具有自引用类型的ASP.NET Core MVC / WEB API不返回json数组

具有ASP.Net Web API的C#实体框架6在JSON响应中返回空数组

ASP.NET Core 2.0 Web API实体框架核心-寻找更优雅的解决方案

ASP.Net Core - 实体框架 - 调用没有返回数据的存储过程(在 void 方法中)

带有 charset1252 的 ASP.NET Core Web API HttpPost

在ASP.NET Core项目中使用没有实体框架的SQLLite数据库

带有 ASP.NET Core Web API 的 Angular msal_angular 返回无效令牌无效签名 AzureAD

带有Firebird数据库和字符集的.Net Core 3实体框架无

带有实体框架的ASP.NET核心多对多不起作用

带有实体框架的MVC(ASP.NET身份)自定义登录状态

ASP.NET Core Web API具有相同动作动词但签名不同的多个动作

允许参数名称在ASP.Net Core WEB API中具有“ [”

具有ASP.NET Core身份的Web API的IdentityServer4基于角色的授权

具有许多参数的ASP.Net Core Web API Controller操作

具有多个构造函数的ASP .Net Core Web API依赖注入类

具有请求/响应模式的ASP.NET Core Web API异常处理

默认的Asp.Net Core Web模板带有错误

带有asp.net core 2.0 Razor Pages的渐进式Web应用程序

使用ASP的SQL Server视图的实体框架。NET Web API