首页 > 解决方案 > C# ASP.NET | 将数据保存到 MongoDB 时,我使用模型类有什么意义吗?

问题描述

我已经开始为我正在构建的应用程序编写一个 ASP.NET Web API。我已经设置了一个MongoCRUD.cs类来将应用程序发出的 POST 请求中的数据保存到 MongoDB 数据库(和其他 CRUD 操作)。

我(按照初学者教程)还设置了一个Submission.cs模型类作为我想要保存到数据库的对象的蓝图。但是,现在我已经实现了 中的InsertRecord()方法MongoCRUD.cs,我看不到这个模型的用途。

MongoCRUD.cs:

using MongoDB.Bson;
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebAPI.Services
{
    public class MongoCRUD
    {
        private IMongoDatabase db;

        public MongoCRUD(string database)
        {
            var client = new MongoClient();
            db = client.GetDatabase(database);
        }

        public void InsertRecord<T>(string table, T record)
        {
            var collection = db.GetCollection<T>(table);
            collection.InsertOne(record);
        }
    }
}

提交.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Policy;
using System.Web;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;

namespace WebAPI.Models
{
    public class Submission
    {
        [BsonId]
        public string SubId { get; set; }
        public string Url { get; set; }
        public string Text { get; set; }
    }
}

提交控制器.cs:

using WebAPI.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using WebAPI.Services;
using System.IO;
using System.Web.Script.Serialization;

namespace WebAPI.Controllers
{
    public class SubmissionsController : ApiController
    {
        MongoCRUD db = new MongoCRUD("myDb");
    
        Submission[] submission = new Submission[] {
            new Submission { SubId = "test", Url = "test", Text = "test" };
        };

        public IEnumerable<Submission> GetAllSubmissions()
        {
            //add MongoCRUD functionality for load record
            return submission;
        }

        public IHttpActionResult GetSubmission(string id)
        {
            //add MongoCRUD functionality for load record
            return Ok();
        }

        public IHttpActionResult PostSubmission(object body)
        {
            //validate body
            db.InsertRecord("Submissions", body);
            return Ok();
        }
    }
}

如您所见PostSubmission(),POST 请求的主体可以直接保存到数据库中,所以我的问题是使用模型Submission.cs而不是仅使用对象类型有什么好处?

我在遍历body对象以访问其值(用于执行验证等)时遇到了一些麻烦,所以我唯一的猜测是使用模型可以更容易地访问值?

标签: c#asp.netmongodbasp.net-web-api

解决方案


object是所有类的基本类型(参见 - https://docs.microsoft.com/en-us/dotnet/api/system.object?view=netcore-3.1)。

C# 是一种面向对象的语言,因此我们尝试根据我们的业务领域对类进行建模,这使得推理代码更容易。

就像您说的那样,您可以拥有可用于验证传入控制器的数据的模型,您也可能希望在与您的业务领域相关的模型上添加额外的方法。

例如

class CreditCard
{
    string CardNumber { get;set; }
    string Csv { get;set; }

    bool ValidateChecksum()
    { }
}

推荐阅读