处理ASP.NET(核心)应用程序和Azure表中的只读值
我有一个这样的物体:处理ASP.NET(核心)应用程序和Azure表中的只读值,asp.net,asp.net-mvc,asp.net-core,mapping,azure-table-storage,Asp.net,Asp.net Mvc,Asp.net Core,Mapping,Azure Table Storage,我有一个这样的物体: class Record { public DateTime Created { get; set; } // ? To SET or not to SET ? public string Name { get; set; } public Record() : this (DateTime.Now) { } public Record(DateTime created) { this.Created = created; } } 我的
class Record
{
public DateTime Created { get; set; } // ? To SET or not to SET ?
public string Name { get; set; }
public Record() : this (DateTime.Now) { }
public Record(DateTime created) { this.Created = created; }
}
我的问题是,我不知道如何将创建的成员作为只读get公开代码>或设置了时代码>
该成员在创建(由构造函数创建)时只设置一次,然后应仅以只读方式查看
在编辑视图中,我对该字段有问题,因为如果我将它们公开为可写(使用设置)输入,它会尝试将其更新回来,或者说它的格式错误;另一方面,如果是只读的,则无法从数据库正确加载(在我的情况下是azure表)
以下是从“数据库”(azure表)恢复记录的函数:
公共异步任务GetTableEntitiesAsync(字符串分区),其中T:ITableEntity,new()
{
TableQuery recordsQuery=新建TableQuery()。其中(
TableQuery.GenerateFilterCondition(“PartitionKey”,QueryComparisons.Equal,partition));
List myList=新列表();
var items=wait this.GetTable().ExecuteQuerySegmentedAsync(recordsQuery,null);
myList=items.ToList();
return myList;//创建只读所有记录时==DateTime.Now
}
您可以使用两种型号:
用于向数据库存储数据或从数据库检索数据的简单DTO类
class DBRecord
{
public DateTime Created { get; set; }
public string Name { get; set; }
}
具有特定逻辑(如时间处理)的业务模型
class Record
{
public DateTime Created { get; private set; }
public string Name { get; set; }
public Record() { this.Created = DateTime.Now;}
public Record(DBRecord dbRecord)
{
this.Name = dbRecord.Name;
this.Created = dbRecord.Created;
}
}
如果我理解正确,我们可以在视图中使用我们的逻辑。请尝试使用以下逻辑执行此操作:
如果尝试将记录添加到表中,则视图中没有已创建的项。
如果我们试图编辑记录,我们可以将创建的项设置为禁用,这意味着我们无法在视图中编辑创建的项
public class Record:TableEntity
{
public DateTime CreatedTime { get; set; }
public string Name { get; set; }
public Record(string pk,string rk,string createDateTime = null)
{
PartitionKey = pk;
RowKey = rk;
CreatedTime = !string.IsNullOrEmpty(createDateTime) ? DateTime.Parse(createDateTime) : DateTime.Now;
}
}
不幸的是,第二个将无法工作,因为我通过TableQuery获取对象,因此属性将自动填充。。。我不知道他们使用什么构造函数,可能是无参数的。。。所以它创建了一个名为“Now”的
public class Record:TableEntity
{
public DateTime CreatedTime { get; set; }
public string Name { get; set; }
public Record(string pk,string rk,string createDateTime = null)
{
PartitionKey = pk;
RowKey = rk;
CreatedTime = !string.IsNullOrEmpty(createDateTime) ? DateTime.Parse(createDateTime) : DateTime.Now;
}
}