【问题标题】:Custom organized data accessing via classes and constructors通过类和构造函数访问自定义组织的数据
【发布时间】:2012-12-05 21:35:24
【问题描述】:

努力为一个基本任务实现解决方案:

与多个Sql Data table 合作,作为网站应用程序的来源...

这就是我再次来到这里的原因...寻求经验丰富的C# .net 开发人员帮助。

我只是想为正确的实现添加一些基本逻辑,比如使用

一个专用的命名空间和类,为所有DATABASE tables保留引用,

(在我尝试工作/学习Entities Framework 方法之前。)

我想尝试实现与EF 相同的基本功能......我自己,这样......我还将学习如何正确使用类。

到目前为止...结构化 据我所知

a 'helper'.. namespace,说公司名称是:HT technologies

所以我将命名空间命名为 HT_DbSchema ...其中包含 :

  • 表格名称
  public sealed class HTDB_Tables
  {
    public const string Customers= "Customers";
    public const string Times= "Times";
  }
  • 表格ID
 public sealed class HT_tblIDs
 {
    public const int tblCustomersID = 1, tblTimesID = 2;
 }
  • 表格列列表 ...(只是一个例子)
public class HTDB_Cols
{

      public class tblCustomers
      {
           public const string CustId  = "custId",
                               CustName  = "custName",
                               CellPhone  = "cellPhone" .... etc'
      }
}

因为所有这 3 个类都服务于所有项目..

对于当前项目的每个表,constructor 还有另一个帮助器类

public class DBMetaDetails
{
       public struct DbTable
       {

             public string TableName { get; set; }
             public int TableID { get; set; }
       }
}

所以仍然这些都是构造/帮助类,并且与项目分开,

现在是当前项目

什么是完成它的适当方法,在项目中使用上述类和构造函数 (我可以命名这些模板)

到目前为止,我为执行某些命令所做的是:

protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    {
      .... some other App inits here
    }

    else
    {

    }    

    // this method should be the one that instanciates the DbTable struct
   //and set the values of tables name and "ID"
   setTablesReferences(); 
}

这就是混乱的开始:

在日常使用中,我想尝试在网站应用程序中实现它:

public void setTableReferences()
{
    DBMetaDetails.DbTable CustMeta = new DBMetaDetails.DbTable();
    DBMetaDetails.DbTable TimesMeta = new DBMetaDetails.DbTable();

}

所以现在我需要设置CustMeta & TimesMeta 详细信息(ids & names)

struct 有一种模板结构,一种用于初始化和分配值的系统技术,因此它的存在为我的逻辑带来了一些不错的秩序。

那么令人困惑的部分是什么?

从一个角度来看(安全),我需要这些表格的详细信息为readonly

所以DbTable.TableIDDbTable.TableName 不会被错误地覆盖。

话虽如此,应该只有一个地方可以设置 ...应用程序的一个专用部分,例如上面的setTableReferences(),...我可以补充: p>

CustMeta.TableID = HT_tblIDs.tblCustomersID
CustMeta.TableName = HTDB_Tables.Customers;

另一方面,我需要表格的信息是可访问的,

如果假设我想将这些 DataTables 添加到 DataSet

DataSet ALLTablesSet = new DataSet();

// assuming the SQL actions already been taken in another method previosly...
// so DataTable is already retrived from DB 
//...but only as a short usage example:

AllTablesSet.Tables.Add(new DataTable(CustMeta.TableName));

我的问题是使用结构的正确方法是什么......就像在我的场景中一样,

所以在应用程序的一个部分:您将初始化 - 私下为其分配一个值。

您可以从应用程序的其他部分使用它的价值(仅适用于Readings

这样,应用程序将无法访问它的写入值, 仅通过读取值,我认为它应该通过另一个(公共只读)变量。

所以该变量本来是要暴露的......它的价值不能被“伤害”

【问题讨论】:

  • 我认为通过使用更少的代码示例和文本格式并添加更多关于您的最终目标的描述来简化您的问题是一个好主意。您可能需要仔细查看并开始了解 System.DataSystem.Data.SqlClient 命名空间中的类。
  • @AlexFilipovici 我可以理解您错过了帖子的全部要点。我不是在寻找.net工具,整个问题是关于需要分配值的结构实例(因此不是read only类型的变量)这是一个问题,因为我需要可以访问这些值但是仅用于阅读目的,其余代码用于为问题添加适当的背景 = 结构包含对象的名称 + id,需要先分配,然后是另一个 public 变量以公开值仅供阅读,我想学习该场景的正确实现

标签: c# database sql-server-2008 asp.net-4.0


【解决方案1】:

如果我正确理解了这个问题,我会阻止其他代码修改它的方法是删除属性上的设置器。但是,您仍然需要在某些时候设置它们,因此您可以将它们设为私有,而不是完全删除设置器。例如:

public string TableName { get; private set; }

如果你这样做,你可以设置这个数据的唯一地方就是结构本身,所以你需要创建一个构造函数来获取你想要的初始值。所以像:

public struct DbTable
{
    public DbTable(string tableName, int tableId)
    {
        this.TableName = tableName;
        this.TableID = tableId;
    }

    public string TableName { get; private set; }
    public int TableID { get; private set; }
}

【讨论】:

  • 你是救世主(:,我现在只需要通过应用程序检查这个,看看我如何访问它以及如何从结构中检索值。所以我猜(看看你的代码再次应该很简单。设置:用说名称是 Dbtbl。DbTbl.TableName="Customers" 所以什么时候可以隐藏它,同时在程序中有一个公共类将使该实例在其范围内私有的,然后我可以使用它的值分配给公共变量......似乎是一个不错的解决方案 Kazetsukai(我希望我做对了)
  • 所以唯一可以设置值的地方是当你第一次构造对象时。这看起来像DbTable table = new DbTable("NameOfTable", 3);
猜你喜欢
  • 2021-03-26
  • 1970-01-01
  • 2012-10-17
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多