-1

基本的なタスクの解決策を達成するには:

Sql Data tableWebSite アプリケーションのソースとして複数の を操作する...

それが私をここに再び導くものです...経験豊富な C# .net開発者のヘルプを探しています。

私は、適切な実装のためにいくつかの基本的なロジックを追加しようとしていました.

専用の名前空間とクラス、すべての参照を保持するため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 つのクラスすべてがすべてのプロジェクトにサービスを提供しているため..

constructorPer Table For the Current Project用の別のヘルパー クラスがあります。

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詳細を設定する必要があります ( ids & names)

これstructには一種のテンプレート構造があり、値を初期化して割り当てるための一種の体系的な手法があるため、その存在により私のロジックに適切な順序がもたらされます。

紛らわしい部分は何ですか?

ある観点から(安全性)、これらのテーブルの詳細が必要ですreadonly

DbTable.TableIDですから、間違って上書きされることDbTable.TableNameはありません。

そうは言っても、SETできる場所は1つだけである必要があります...上記のようなアプリケーションの専用セクション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));

私の質問は、構造体を操作する正しい方法は何ですか...私のシナリオのように、

したがって、アプリの 1 つのセクションでは、初期化して値を非公開に割り当てます。

アプリの他のセクションから、その値を使用できます(読み取り専用)

そうすれば、アプリケーションは値を読み取ることによってのみ書き込み用の値にアクセスできなくなります。別の(Public ReadOnly)変数を使用する必要があると思います。

その変数は公開されることを意図していた...そしてその値は「害を受ける」ことはできませんでした

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 に答える