프로젝트에서 엔티티를 직렬화하려고합니다. 나는 그 (것)들의 많은 것이있다 그래서 나는 지금 막 시작하고있다. 우리 프로젝트의 목적은 엔티티 프레임 워크를 사용하여 감사 추적을 만드는 것입니다. audit.newvalue = doc.root.tostring()에서 중단 될 때 루트는 null입니다. 나는 모든 튜토리얼이나 q/a에 따라 이것을 찾으려고 노력해 왔지만, 매번 null이되었다. 내가 여기서 뭘 놓치고 있는지 모르겠다.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();
}
은'entry.Entity'가 비어 있습니까? – msmucker0527
그렇지 않습니다. 관련된 것이 아니라, 나의 수업 클라이언트는 내가 여기서 제공하는 것보다 훨씬 큽니다. 이 감소 된 버전으로 테스트를 시도했을 때 나는 예상 된 결과를 얻었다. DataContractSerializer 사용 방법을 리팩터링 한 후. – Michael