0

J'essaie de sérialiser les entités dans mon projet. J'ai beaucoup d'entre eux donc je commence avec juste un pour le moment. Le but de mon projet est de créer une piste d'audit avec un framework d'entité. Quand je casse à audit.newvalue = doc.root.tostring() la racine est null. J'ai essayé de suivre chaque tutoriel ou q/a que je trouve lié à faire cela, mais chaque fois que je reçois nulle. Je ne sais pas ce que je manque ici.Les entités ne sont pas sérialisées à l'aide de DataContractSerializer

[DataContract(IsReference=true)] 
public class Client 
{ 
    [DataMember] 
    [Key] 
    [DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 

    [DataMember] 
    public bool Active { get; set; } 

    [DataMember] 
    [Required] 
    public string LastName { get; set; } 
    [DataMember] 
    public string MiddleName { get; set; } 
    [DataMember] 
    [Required] 
    public string FirstName { get; set; } 

    [DataMember] 
    [Required] 
    public DateTime BirthDate { get; set; } 
} 

private Audit.DBAudit AuditTrailFactory(ObjectStateEntry entry, string userName) 
    { 
     var oc = this as IObjectContextAdapter; ; 
     oc.ObjectContext.DetectChanges(); 

     Audit.DBAudit audit = new Audit.DBAudit(); 
     audit.TimeStamp = DateTime.Now; 
     audit.Entity = entry.EntitySet.Name; 
     audit.User = userName; 

     // set action type 
     switch (entry.State) 
     { 
      case System.Data.EntityState.Added: 
       audit.ActionType = ActionTypes.I.ToString(); 
       break; 
      case System.Data.EntityState.Modified: 
       audit.ActionType = ActionTypes.U.ToString(); 
       break; 
      case System.Data.EntityState.Deleted: 
       audit.ActionType = ActionTypes.D.ToString(); 
       break; 
      default: 
       audit.ActionType = "F"; // fubar 
       break; 
     } 

     DataContractSerializer serializer = new DataContractSerializer(entry.Entity.GetType()); 

     XDocument doc = new XDocument(); 
     XmlWriter writer = doc.CreateWriter(); 

     serializer.WriteObject(writer, entry.Entity); 
     audit.NewValue = doc.Root.ToString(); 

     return audit; 
    } 

    [TestMethod] 
    public void CanCreateAudit() 
    { 
     FircrestModel.Client.Client client = new FircrestModel.Client.Client 
     { 
      FirstName = "billy", 
      LastName = "jones", 
      BirthDate = new DateTime(1970, 1, 1), 
     }; 

     context.Clients.Add(client); 
     context.SaveChanges(); 
    } 
+0

est 'entry.Entity' vide? – msmucker0527

+0

ce n'est pas le cas. pas lié, mon client de classe est beaucoup plus grand que l'exemple que je fournis ici. Quand j'ai essayé mon test avec cette version réduite, j'ai obtenu les résultats attendus. après refactoring comment j'utilisais le DataContractSerializer. – Michael

Répondre

Questions connexes