-1

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

与多个Sql Data table作为来源的网站应用程序一起工作......

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

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

一个专用的命名空间和类,为 All 保存参考DATABASE tables

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

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

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

一个'帮手'.. 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();

}

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

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

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

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

所以DbTable.TableID,并且DbTable.TableName不会被错误地覆盖。

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

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

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

所以如果让我们说我想将它们添加DataTablesDataSet

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

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

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

并且从应用程序的其他部分,您可以使用它的值(仅适用于读数

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

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

4

1 回答 1

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; }
}
于 2012-12-06T03:41:22.863 回答