C# |如何制作用于将数据从 DAL 传递到 BLL 的类实例(对象)

Posted

技术标签:

【中文标题】C# |如何制作用于将数据从 DAL 传递到 BLL 的类实例(对象)【英文标题】:C# | How to make class instances (objects) for passing data from DAL to BLL 【发布时间】:2020-08-31 00:28:03 【问题描述】:

我正在处理我的第一个 C# 架构项目,但遇到了一个我无法解决的问题,也无法在 Internet 上找到答案(可能是因为我什至不知道用谷歌搜索什么)。 所以我想我应该尝试向熟悉我正在尝试做的事情的人寻求帮助。

在我的 DAL 中,我有以下代码:

using System;
using System.Data.SqlClient;
using System.Data;
using System.Collections.Generic;

namespace DAL

    public class ClsDataLayer
    
        SqlConnection SqlConn = new SqlConnection("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=3tireexample;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False");

        public List<String> Testlijst()
        
            string commandText_Testlijst = "Select * from Usermst";
            List<String> Gebruikers = new List<string>();
            using (SqlConn)
            
                SqlConn.Open();
                using (SqlCommand cmd = new SqlCommand(commandText_Testlijst, SqlConn))
                
                    cmd.CommandType = CommandType.StoredProcedure;
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    
                        while (reader.Read())
                        
                            Gebruikers.Add(reader.GetString(0));
                        
                    
                
            
            return Gebruikers;
            ;
        
        public bool InsertDataBool(string _name, string _city, string _email)
        
            string commandText = "Insert into Usermst values (@name, @city, @email)";
            bool test = false;
            using (SqlConnection connection = new SqlConnection("Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=3tireexample;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"))
            
                SqlCommand command = new SqlCommand(commandText, connection);
                command.Parameters.Add("@name", SqlDbType.NVarChar);
                command.Parameters["@name"].Value = _name;
                command.Parameters.Add("@city", SqlDbType.NVarChar);
                command.Parameters["@city"].Value = _city;
                command.Parameters.Add("@email", SqlDbType.NVarChar);
                command.Parameters["@email"].Value = _email;
                command.ExecuteNonQuery();
                test = true;
            
            return test;

        
    

我正在尝试将从列表中收到的信息传递给我的业务层。 我正在阅读其他一些 *** 帖子,我看到有人说要使用类实例来解决这个问题,但问题是我不知道怎么做。 如何将数据从我的公共列表(在我的 DAL 中)传输到我的 UserData.cs(这是我的类实例的名称)? 我的问题真的是我的 UserData.cs 文件应该是什么样子(代码方面) 我对这一切都很陌生,所以如果您能解释一下您的工作以及为什么非常简单,那就太好了。

非常感谢您!

【问题讨论】:

在最简单的形式中,它可能只是 var user = new User();,然后使用您从 SQL 查询中检索到的值设置 user 的属性。 @ScottHannen 在代码中应该是什么样子? 不幸的是,这超出了我在这个网站上的充分覆盖范围。 【参考方案1】:

我们将其称为 DTO(数据传输对象)的概念。

可以使用 DTO 类为 DTO 创建另一个命名空间。

在您的特定情况下,dto 想要

public class UserDTO

public string nameget;set;


在业务层和 DAL 中添加 DTO 的引用。

从业务层调用 DAL 如下

List<UserDto> users = new ClsDataLayer.TestList();

您必须更新 DAL 层才能返回 DTO。

使用 DTO 的好处是您可以发送多个值,而不仅仅是当前发送的一个值

【讨论】:

以上是关于C# |如何制作用于将数据从 DAL 传递到 BLL 的类实例(对象)的主要内容,如果未能解决你的问题,请参考以下文章

如何将用于审计目的的 web n 层应用程序中的用户身份从用户界面层传递到数据访问层?

创建日期 - 应该在 BL 或 DAL 中设置此值?

数据访问层和业务对象

如何将数据从表示层传递到业​​务逻辑层? (ASP.NET MVC 5)

使用 LINQ 作为 DAL 时如何传输数据?

C# 数据层和 Dto