我需要一种在事务上下文中序列化对象的方法。
给出以下伪代码:
transation.Begin()
try{
serializeObj(obj1);
serializeObj(obj2);
serializeObj(obj3);
}
catch(Exception){
transaction.RollBack();
}
transaction.Commit();
我希望在此代码运行之后,或者所有对象都已被序列化,或者没有一个被序列化。
我不认为TransactionScpe给了我这种能力。 我更喜欢一些内置的.NET机制而不是一些外部库。
感谢。
答案 0 :(得分:2)
如果您有事务性文件系统(transaction ntfs),我认为您可以通过this和blog中讨论的方法实现您的目标。另外alphafs可能值得一看(他们为事务ntfs写了一个托管包装器),但我不知道项目的状态。
答案 1 :(得分:0)
假设serializeObj(Object obj)
专门序列化为文件:
List<string> FileNames = new List<string>();
try
{
serializeObj(obj1);
//Add a method to determine the filename to which you wrote
FileNames.Add(GetSerializedFileName(obj1))
//repeat for all your objects
}
catch(Exception)
{
Foreach(string fn in FileNames)
{
if(File.Exists(fn) File.Delete(fn);
}
}
假设serializeObj(Object obj)
之后只是简单地写入IO的内存流,那就更容易了:
List<Stream> Files = new List<Stream>();
try
{
Files.Add(serializeObj(obj1));
//repeat for all your objects
}
catch(Exception)
{
Foreach(Stream fn in Files)
{
fn.Dipose();
}
}