通过类和构造函数访问自定义组织数据

时间:2012-12-05 21:35:24

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

努力实现基本任务的解决方案:

使用多个Sql Data table作为源,用于WebSite应用程序......

这就是让我再次来到这里的原因......寻找经验丰富的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'
      }
}

并且所有这三个班级都在为所有项目提供服务..

当前项目的每个表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(); 
}

这就是混乱开始的地方:

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

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

}

所以现在我需要设置CustMeta& TimesMeta个详细信息(id s& name s)

struct有一种模板结构,是一种初始化和赋值的系统技术,所以它为我的逻辑带来了一些不错的秩序。

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

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

所以DbTable.TableIDDbTable.TableName不会错误地过度思考。

话虽如此,应该只有一个地方可以设置 ...应用程序的专用部分,如上面的setTableReferences(),...我可能会添加:

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));

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

所以在app的一个部分:你会初始化 - 私下给它赋值。

从应用的其他部分您可以使用其值(仅限读数

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

因此变量意味着暴露......并且它的价值无法“受到伤害”

1 个答案:

答案 0 :(得分:1)

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

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; }
}