努力实现基本任务的解决方案:
使用多个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";
}
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.TableID
和DbTable.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)变量。
因此变量意味着暴露......并且它的价值无法“受到伤害”
答案 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; }
}