如何向数据库中正确添加项目并分离关注点[保留]

问题描述 投票:-1回答:1

我正在尝试创建一个帖子,以将实体添加到我的数据库中。我担心我可能会混淆数据和视图层。我对设计模式非常陌生,而存储库模式正在使我丧命。

这是我控制器的一些代码。

[HttpPost("CreateArtItem/{createArtItemRequest}")]
        public async Task<ActionResult<ArtItem>> Put(CreateArtItemRequest createArtItemRequest)
        {
            try
            {
                if (createArtItemRequest != null)
                {
                    ArtItem artItem = new ArtItem()
                    {
                        //mapping
                    };

                    _artRepository.AddArtItem(artItem);
                    _artRepository.Add(artItem);
                    if (await _artRepository.SaveChangesAsync())
                    {
                        return Created(artItem.Id.ToString(), artItem);
                    }
                    else
                    {
                        return this.StatusCode(StatusCodes.Status500InternalServerError, "Database failure.");
                    }
                }
                else
                {
                    return BadRequest();
                }

            }
            catch (Exception e)
            {
                return this.StatusCode(StatusCodes.Status500InternalServerError, "Database failure.");
            }
        }

[如果有人可以向我解释不同的层如何工作,数据操作是什么以及这是否是post的正确实现,我将非常感激。

我正在遵循关于多元视野的指南,而花花公子的教学也在做类似的事情。

pluralsight

c# asp.net-web-api model-view-controller design-patterns repository-pattern
1个回答
0
投票

在您的示例中,为了创建新实体并将其保存到数据库中,您使用:

  • a 存储层将模型(应用程序域的业务实体)与数据库架构对象(表,视图等)分离。您的模型是ArtItem
  • 视图模型对象CreateArtItemRequest,这会将您的用户界面与业务模型分离。

您必须实现的数据操作是:

  1. CreateArtItemRequest映射到ArtItem] >>Add()
  2. 方法
  3. SaveChangesAsync()
  4. 从您的示例中,我看到您使用2种方法将新实体添加到您的存储库中(这似乎是类控制器的属性或字段,并且您调用了两次重新记录方法以添加新实体)创建新实体,我认为这是一种错误,无论如何,只需调用一次即可将该实体添加到存储库。

您应该知道存储库如何工作,以及它们如何对数据(AddSaveQuery等)进行操作。

© www.soinside.com 2019 - 2024. All rights reserved.