Skip to content

DynamoDBContext DeleteAsync by key fails #2615

Open
@BryanCrotaz

Description

@BryanCrotaz

Describe the bug

The data table

   "WebsocketConnectionsTable": {
      "Type" : "AWS::DynamoDB::Table",
      "Properties" : {
          "AttributeDefinitions" : [ 
              {
                "AttributeName" : "conn",
                "AttributeType" : "S"
              }
          ],
          "BillingMode" : "PAY_PER_REQUEST",
          "ContributorInsightsSpecification" : {
            "Enabled" : false
          },
          "DeletionProtectionEnabled" : true,
          "GlobalSecondaryIndexes" : [
          ],
          "KeySchema" : [ 
            {
              "AttributeName" : "conn",
              "KeyType" : "HASH"
            }
          ],
          "TableClass" : "STANDARD",
          "TableName" : { 
            "Fn::Join" : [ 
              "-", 
              [ 
                "my-app",            
                { 
                  "Ref" : "StageNameParameter" 
                }, 
                "websocket-auth-table" 
              ] 
            ] 
          },
          "Tags" : [ ]
        }
    }
// the model
	[DynamoDBTable("websocket-auth-table")]
	public class WebsocketConnectionDB
	{
		public WebsocketConnectionDB()
		{
			ConnectionId = "";
			UserId = "";
		}

		[DynamoDBHashKey("conn")]
		public string ConnectionId { get; set; }

		[DynamoDBProperty("user")]
		public string UserId { get; set; }

		[DynamoDBProperty("connected")]
		public Int64 ConnectedAsNumber
		{
			get
			{
				return new DateTimeOffset(Connected).ToUnixTimeSeconds();
			}
			set
			{
				Connected = DateTimeOffset.FromUnixTimeSeconds(value).DateTime;
			}
		}

		[DynamoDBIgnore]
		public DateTime Connected { get; set; }
	}

The code - delete a row based on the hash

	public Task Delete(string id)
	{
               var operationConfig = new DynamoDBOperationConfig()
		{
			TableNamePrefix = this.tableNamePrefix
		};
		return dynamoContext.DeleteAsync<string>(id, operationConfig);
	}
fail	System.InvalidOperationException: Type System.String is unsupported, it cannot be instantiated   
at Amazon.DynamoDBv2.DataModel.StorageConfig..ctor(ITypeInfo targetTypeInfo)   
at Amazon.DynamoDBv2.DataModel.ItemStorageConfig..ctor(ITypeInfo targetTypeInfo)   
at Amazon.DynamoDBv2.DataModel.ItemStorageConfigCache.CreateStorageConfig(Type baseType, String actualTableName)   
at Amazon.DynamoDBv2.DataModel.ItemStorageConfigCache.GetConfig(Type type, DynamoDBFlatConfig flatConfig, Boolean conversionOnly)   
at Amazon.DynamoDBv2.DataModel.ItemStorageConfigCache.GetConfig[T](DynamoDBFlatConfig flatConfig, Boolean conversionOnly)   
at Amazon.DynamoDBv2.DataModel.DynamoDBContext.DeleteHelperAsync[T](Object hashKey, Object rangeKey, DynamoDBOperationConfig operationConfig, CancellationToken cancellationToken)   
at Amazon.DynamoDBv2.DataModel.DynamoDBContext.DeleteAsync[T](Object hashKey, DynamoDBOperationConfig operationConfig, CancellationToken cancellationToken)   
at DynamoRepository`2.Delete(TId id)   
at DisplaySure.WebSockets.WebsocketEntryPoint.HandleDisconnect(APIGatewayProxyRequest request)   
at lambda_method1(Closure , Stream , ILambdaContext , Stream )   
at Amazon.Lambda.RuntimeSupport.Bootstrap.UserCodeLoader.Invoke(Stream lambdaData, ILambdaContext lambdaContext, Stream outStream) in /src/Repo/Libraries/src/Amazon.Lambda.RuntimeSupport/Bootstrap/UserCodeLoader.cs:line 145   
at Amazon.Lambda.RuntimeSupport.HandlerWrapper.<>c__DisplayClass8_0.<GetHandlerWrapper>b__0(InvocationRequest invocation) in /src/Repo/Libraries/src/Amazon.Lambda.RuntimeSupport/Bootstrap/HandlerWrapper.cs:line 55   
at Amazon.Lambda.RuntimeSupport.LambdaBootstrap.InvokeOnceAsync(CancellationToken cancellationToken) in /src/Repo/Libraries/src/Amazon.Lambda.RuntimeSupport/Bootstrap/LambdaBootstrap.cs:line 176 | 2023-05-23T19:08:53.089Z e247f672-d020-428f-b0fb-adc3f4bdcea4 fail System.InvalidOperationException: Type System.String is unsupported, it cannot be instantiated at Amazon.DynamoDBv2.DataModel.StorageConfig..ctor(ITypeInfo targetTypeInfo) 
at Amazon.DynamoDBv2.DataModel.ItemStorageConfig..ctor(ITypeInfo targetTypeInfo) 
at Amazon.DynamoDBv2.DataModel.ItemStorageConfigCache.CreateStorageConfig(Type baseType, String actualTableName) 
at Amazon.DynamoDBv2.DataModel.ItemStorageConfigCache.GetConfig(Type type, DynamoDBFlatConfig flatConfig, Boolean conversionOnly) 
at Amazon.DynamoDBv2.DataModel.ItemStorageConfigCache.GetConfig[T](DynamoDBFlatConfig flatConfig, Boolean conversionOnly) 
at Amazon.DynamoDBv2.DataModel.DynamoDBContext.DeleteHelperAsync[T](Object hashKey, Object rangeKey, DynamoDBOperationConfig operationConfig, CancellationToken cancellationToken)
at Amazon.DynamoDBv2.DataModel.DynamoDBContext.DeleteAsync[T](Object hashKey, DynamoDBOperationConfig operationConfig, CancellationToken cancellationToken) at DynamoRepository`2.Delete(TId id) 
at DisplaySure.WebSockets.WebsocketEntryPoint.HandleDisconnect(APIGatewayProxyRequest request) 
at lambda_method1(Closure , Stream , ILambdaContext , Stream ) 
at Amazon.Lambda.RuntimeSupport.Bootstrap.UserCodeLoader.Invoke(Stream lambdaData, ILambdaContext lambdaContext, Stream outStream) in /src/Repo/Libraries/src/Amazon.Lambda.RuntimeSupport/Bootstrap/UserCodeLoader.cs:line 145 
at Amazon.Lambda.RuntimeSupport.HandlerWrapper.<>c__DisplayClass8_0.<GetHandlerWrapper>b__0(InvocationRequest invocation) in /src/Repo/Libraries/src/Amazon.Lambda.RuntimeSupport/Bootstrap/HandlerWrapper.cs:line 55 
at Amazon.Lambda.RuntimeSupport.LambdaBootstrap.InvokeOnceAsync(CancellationToken cancellationToken) in /src/Repo/Libraries/src/Amazon.Lambda.RuntimeSupport/Bootstrap/LambdaBootstrap.cs:line 176

Expected Behavior

Expected the row with that hash Id to be deleted

Current Behavior

Exception, see above

Reproduction Steps

See above

Possible Solution

No response

Additional Information/Context

No response

AWS .NET SDK and/or Package version used

AWSSDK.DynamoDBv2 3.7.103.8

Targeted .NET Platform

.Net 6

Operating System and version

AWS Lambda

Metadata

Metadata

Assignees

No one assigned

    Labels

    doc-apireferencedocumentationThis is a problem with documentation.dynamodbfeature-requestA feature should be added or improved.p3This is a minor priority issuequeuedxsEffort estimation: tiny

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions