【问题标题】:How to convert Model class object to datatable如何将模型类对象转换为数据表
【发布时间】:2019-07-20 19:30:37
【问题描述】:

我是 C# 新手,我想在 Web API 中将模型类对象转换为 DataTable。

模型类

 public class Employee_Master_Model
    {
        public string UserType { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string MiddleName { get; set; }
        public string Mobile { get; set; }
        public string Phone { get; set; }
        public string Email { get; set; }
        public bool IsActive { get; set; }
        public int EmployeeId { get; set; }
    }

控制器:

 public async Task<IActionResult> CreateEmployee([FromBody] Employee_Master_Model employee_Master_Model)
        {
            try
            {
              // Need to convert the object (employee_Master_Model) to DataTable
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

尝试了好几个小时都无法完成。谁能帮我解决这个问题。

【问题讨论】:

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


【解决方案1】:

通过以下代码可以动态创建数据表列:

PropertyDescriptorCollection props = 
    TypeDescriptor.GetProperties(typeof(Employee_Master_Model));
DataTable dt = new DataTable();
foreach (PropertyDescriptor p in props)
    dt.Columns.Add(p.Name, p.PropertyType);

剩下的只是将实体字段值复制到数据表列。

【讨论】:

    【解决方案2】:

    你为什么不能只创建一个数据表并用模型数据值填充它

    DataTable dt = new DataTable();
    
    DataColumn c = new DataColumn("FirstName");
    dt.Columns.Add(c);
    
    DataRow r = dt.NewRow();
    r["FirstName"] = model.FirstName; // model is an instance of Employee_Master_Model
    

    【讨论】:

    • @PrasadTelkikar 可能是可能的,但这是不现实的,因为在单个表中有 100 列是违反规范化的,同样具有 100 个数据成员的类型也不现实
    • @PrasadTelkikar 是的,没有必要,因为除非使用任何 ORM 框架,否则没有任何必要
    【解决方案3】:

    您的代码中有许多问题。

    首先,EmployeeId 与您的创建模型无关。让数据库为您生成 id。我怀疑您使用 Employee_Master_Model 进行创建和更新。如果是这种情况,我建议您停止这样做,创建一个单独的模型来创建和删除您不需要的属性。

    其次,不要从您的 API 返回 DataTable。一种常见的方法是返回已创建实体的生成 id,仅此而已。如果您确实需要获取所有数据,那么您可以创建一个 GET 端点,将您刚刚收到的 id 传递给它,这将为您提供数据。

    第三,既然你在使用WebAPi,那就学习使用模型,学习使用DTO(数据传输对象)。这些通常用于返回数据。数据表是数据库实现的一部分,您不希望通过 API 公开它。

    【讨论】:

      猜你喜欢
      • 2019-08-04
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 2010-11-15
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多