C# .NET:将对象序列化到事务环境中

C# .NET:将对象序列化到事务环境中,c#,.net,serialization,transactions,C#,.net,Serialization,Transactions,我需要一种在事务上下文中序列化对象的方法 给定以下伪代码: transation.Begin() try{ serializeObj(obj1); serializeObj(obj2); serializeObj(obj3); } catch(Exception){ transaction.RollBack(); } transaction.Commit(); 我希望在代码运行之后,或者所有对象都已序列化,或者所有对象都未序列化 我不认为TransactionC

我需要一种在事务上下文中序列化对象的方法

给定以下伪代码:

transation.Begin()
try{
    serializeObj(obj1);
    serializeObj(obj2);
    serializeObj(obj3);
}
catch(Exception){
    transaction.RollBack();
}
transaction.Commit();
我希望在代码运行之后,或者所有对象都已序列化,或者所有对象都未序列化

我不认为TransactionCPE给了我这种能力。 我更喜欢一些内置的.NET机制,而不是一些外部库


谢谢。

假设
序列化obj(对象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);
    }
}

如果您有一个事务文件系统(),我认为您可以通过和中讨论的方法实现您想要的。也可能值得一看(他们为事务ntfs编写了一个托管包装器),但我不知道项目的状态。

将对象序列化到数据库的位置?对象序列化到文件系统。文件系统不是事务性的。但您可以序列化到临时文件,然后作为最后一步进行重命名。这已经很接近了。问题仍然存在。。重命名最后一个文件时可能出现问题。请将所有对象序列化到同一个文件,或在序列化过程中创建锁定文件。然后在读取对象之前可以查看是否有锁定文件。谢谢。但这不是交易。如果由于某种原因,硬件停止响应并强制应用程序重新启动,该怎么办?如果失败发生在obj3序列化过程中(在我的伪代码中),obj1和obj2将保留在文件系统中。我个人从未使用过TransactionScope,但您是否可以使用(TransactionScope myScope=new TransactionScope){}块将其包装在
中?我认为不是。无论如何,这是我问题的一部分!:)
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();
    }
}