2017-09-28 2 views
0

J'ai conçu une classe simple comme ça:AWS DynamoDB Objet persistance Modèle: Ma classe est non pris en charge, il ne peut pas être instancié

[DynamoDBTable("MyTableName")] 
public class MySimpleClass{ 

    [DynamoDBHashKey] 
    public string Id { get; set; } 

    [DynamoDBProperty] 
    public DateTime TimeStamp { get; set; } 

    [DynamoDBProperty] 
    public string Message { get; set; } 

    public MySimpleClass(AnotherClass anotherClassMessage){ 
     this.Id = anotherClassMessage.Id; 
     this.TimeStamp = anotherClassMessage.TimeStamp; 
     this.Message = anotherClassMessage.Message; 
    } 
} 

Lorsque je tente de persister sur mon DynamoDB Table en utilisant DynamoDBContext objet contexte pour convertir une persistance objet DynamoDB modèle à l'aide:

context.ToDocument(data) 

il jette l'exception e ci-dessous:

e.Message: Type myProject.myNameSpace.MySimpleClass est non pris en charge, il ne peut pas être instancié

e.StackTrace: à Amazon.DynamoDBv2.DataModel.StorageConfig..ctor (ITypeInfo targetTypeInfo) à Amazon.DynamoDBv2.DataModel.ItemStorageConfig..ctor (ITypeInfo targetTypeInfo) à Amazon.DynamoDBv2.DataModel.ItemStorageConfigCache.CreateStorageConfig (Type baseType, String actualTableName) à Amazon.DynamoDBv2.DataModel.ItemStorageConfigCache.GetConfig (type Type, DynamoDBFlatConfig flatConfig, Boolean conversionOnly) à Amazon.DynamoDBv2.DataModel.DynamoDBContext.ObjectToItemStorage (Object toStore, type objectType, Boolean keysOnly, DynamoDBFlatConfig flatConfig) à Amazon.DynamoDBv2.DataModel.DynamoDBContext.ObjectToItemStorage [T] (T toStore, Boolean keysOnly, DynamoDBFlatConfig flatConfig) sur Amazon. DynamoDBv2.DataModel.DynamoDBContext.ToDocument [T] (valeur T, DynamoDBOperationConfig operationConfig) à Amazon.DynamoDBv2.DataModel.DynamoDBContext.ToDocument [T] (valeur T) à myProject4PersistanceOnDynamo.DynamoTableWrapper.Persist [T] (données T) dans C: \ MyProject \ myProject4PersistanceOnDynamo \ DynamoTableWrapper.cs: ligne 101 (ce qui signifie context.ToDocument (données))

e.Source: AWSSDK.DynamoDBv2 (Version: 3.3.0.0 | Version en cours d'exécution: v4.0.30319)

Mon myProject4PersistanceOnDynamo.DynamoTableWrapper.Persist [T] (données T) est:

public void Persist<T>(T data) 
{ 
    // Client is a AmazonDynamoDBClient object with correct credentials 
    private DynamoDBContext context = new DynamoDBContext(Client) 

    try 
    { 
     var doc = context.ToDocument(data); 
     Table.PutItem(doc); 
    } 
    catch (Exception e) 
    { 
     throw e; 
    } 
} 

J'ai vérifié la documentation sur ce page et ce other page et il n'a pas Semble I utilisé un objet interdit. Une idée de ce qui ne va pas?

+0

Wild devinez ici (je n'utilise pas C#). Serait-ce parce que la classe n'a pas de constructeur simple avec id, message et horodatage, donc elle ne peut pas être instanciée à partir de ces valeurs uniquement? – jarmod

Répondre

1

MySimpleClass publics (AnotherClass anotherClassMessage) {

Vous devez avoir un constructeur sans dépendances.

Définir un constructeur polymorphes comme celui-ci,

public MySimpleClass() {} 

qui devrait résoudre le problème.

Espérons que ça aide.

+0

Parfait! Je vous remercie! C'est un détail subtil. J'essaye de le trouver écrit sur la documentation. – FabioGM

+1

Si cela résout votre problème, s'il vous plaît prendre est répondu, si vous avez encore des problèmes s'il vous plaît laissez un commentaire. – Kannaiyan