C# 在运行时为属性设置一个值

C# 在运行时为属性设置一个值,c#,amazon-web-services,aws-lambda,attributes,C#,Amazon Web Services,Aws Lambda,Attributes,我有一个包含一些类的名称空间,我正在处理的一个类包含属性,其中每个属性都有一个与之关联的属性,如下所示 namespace Local.Business { [DynamoDBTable("myTableName")] public class Business { [DynamoDBHashKey("PK")] public string MunId {get; set;} [DynamoDBRangeKey

我有一个包含一些类的名称空间,我正在处理的一个类包含属性,其中每个属性都有一个与之关联的属性,如下所示

namespace Local.Business
{
    [DynamoDBTable("myTableName")]     
    public class Business
    {
        [DynamoDBHashKey("PK")] 
        public string MunId {get; set;}

        [DynamoDBRangeKey("SK")]
        public string Id {get; set;}

        [DynamoDBProperty("Dba")] 
        public string Dba {get; set;} 
    }
}
字符串“myTableName”需要在运行时确定(通过调用函数或从其他类的属性读取)
请问,我怎样才能做到这一点呢?

您试图做的事情本身就是有缺陷的。有时候你可以改变属性,但是很有可能任何使用属性的东西都看不到改变,这使得改变毫无意义

基本上:您需要找到另一种在运行时重新配置
DynamoDB
的方法。不是这样


对于“有点像罐头”:

  • 您可以具体化属性,如果属性是可变的,则更改您拥有的副本;但是当其他代码具体化这些属性时,它们将得到不同的不相关版本,这些版本不会有您所做的任何更改
  • 有一个API支持这个概念(
    System.ComponentModel
    ),但是:大多数属性使用者不使用该API-它主要只是UI绑定工具(想想
    PropertyGrid
    DataGridView
    ,等等)这会引起任何注意,因为他们希望处理像
    DataTable
    这样的东西,这些东西需要不同的元数据和反射方法

你试图做的事情本身就是有缺陷的。有时候你可以改变属性,但是很有可能任何使用属性的东西都看不到改变,这使得改变毫无意义

基本上:您需要找到另一种在运行时重新配置
DynamoDB
的方法。不是这样


对于“有点像罐头”:

  • 您可以具体化属性,如果属性是可变的,则更改您拥有的副本;但是当其他代码具体化这些属性时,它们将得到不同的不相关版本,这些版本不会有您所做的任何更改
  • 有一个API支持这个概念(
    System.ComponentModel
    ),但是:大多数属性使用者不使用该API-它主要只是UI绑定工具(想想
    PropertyGrid
    DataGridView
    ,等等)这会引起任何注意,因为他们希望处理像
    DataTable
    这样的东西,这些东西需要不同的元数据和反射方法

在类文件中将表名值设置为空字符串:

[发电机表(“”)]


在运行时,使用
DynamoDBMapper
上的重载函数传递
DynamoDBMapperConfig
配置为
TableNameOverride
将类文件中的表名值设置为空字符串:

[发电机表(“”)]


在运行时,使用
DynamoDBMapper
上的重载函数传递
DynamoDBMapperConfig
配置了
TableNameOverride
实际上我删除了表属性,并在查询中给出了表名

 dynamoDBOperationConfig = new DynamoDBOperationConfig();
 dynamoDBOperationConfig.OverrideTableName = "tableName";
 string munId = "1";
 var search = dynamoDBcontext.QueryAsync<Business>(munId, dynamoDBOperationConfig);
dynamodbooperationconfig=new dynamodbooperationconfig();
DynamodBoOperationConfig.OverrideTableName=“tableName”;
字符串munId=“1”;
var search=dynamoDBcontext.querysync(munId,dynamodbooperationconfig);

它工作得很好,谢谢大家的帮助

实际上我删除了表属性,并在查询中给出了表名

 dynamoDBOperationConfig = new DynamoDBOperationConfig();
 dynamoDBOperationConfig.OverrideTableName = "tableName";
 string munId = "1";
 var search = dynamoDBcontext.QueryAsync<Business>(munId, dynamoDBOperationConfig);
dynamodbooperationconfig=new dynamodbooperationconfig();
DynamodBoOperationConfig.OverrideTableName=“tableName”;
字符串munId=“1”;
var search=dynamoDBcontext.querysync(munId,dynamodbooperationconfig);

它工作得很好,感谢大家的帮助

尝试编辑存储在属性中的数据是个坏主意,但如果确实需要,则需要使用反射。看看这个问题,如何使用反射更改它?谢谢@sean@Sean这是行不通的:尝试编辑存储在属性中的数据是个坏主意,但如果确实需要,则需要使用反射。看看这个问题,如何使用反射更改它?谢谢@sean@Sean这根本不起作用: