0

我意识到已经发布了很多关于 ADO.Net 实体序列化的问题,但我没有任何运气找到一个真正解决我想做的事情的问题。

基本上,我需要一个 ADO.Net 实体的非常简单的、浅的 JSON 或纯对象表示。目的是记录变更;即,当要更改记录时,我想在“之前”和“之后”获取其数据的副本,并记录更改。

我不希望考虑任何导航、复杂或其他属性;只是实体的标量属性。如果我错过了一些只会在特殊情况下出现的数据,那很好——只是尝试做一个粗略的日志。理想情况下,我的最终代码应如下所示:

Employee emp = db.Employees.First();

string oldRecordJSON = MySerializer.serialize(emp);

emp.Name = "Fred";
db.saveChanges();

string newRecordJSON = MySerializer.serialize(emp);

ChangeLog.logDBChange("Employees", emp.ID, oldRecordJSON, newRecordJSON, DateTime.Now);

...任何快速简便的实施方法MySerializer.serialize

谢谢!

4

1 回答 1

1

如果您只是想要员工的某些特定属性,请考虑创建一个基本模型并将其序列化。

var serializer = new JavaScriptSerializer();
serializer.Serialize(new MyEmployeeModel{ // set fields here});

如果您愿意,您可以将其构建为转换器,这就是我的做法。

我有一个接口,IConverter<TInputType, TOutputType>您可以从中创建一个转换器以将(或您想做的任何事情)注入您的代码。

public interface IEmployeeFromDatabaseToBasicEmployeeModelConverter 
     : IConverter<TheDBType, MyEmployeeModel>{}

public class EmployeeFromDatabaseToBasicEmployeeModelConverter :
                               IEmployeeFromDatabaseToBasicEmployeeModelConverter 
{
  public MyEmployeeModel Invoke(TheDBType myDbTypeObject)
  {
     return new MyEmployeeModel{
      // set properties.
     }
  }
}
于 2012-04-23T15:41:31.877 回答