Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架及;系列化_C#_Entity Framework_Serialization - Fatal编程技术网

C# 实体框架及;系列化

C# 实体框架及;系列化,c#,entity-framework,serialization,C#,Entity Framework,Serialization,我的数据库为空时没有创建映射。因此,当我尝试从一个从dbset序列化的文件中反序列化一个对象时,我得到一个错误,指出类中包含的一个类不可用。我猜这是因为映射/代理尚未创建,但我不知道如何在调用之前强制EF创建它。只要数据库/EF类中有数据,一切都正常。。但是当我没有记录时,我会收到一个错误,指出“反序列化需要System.Data.Entity.DynamicProxies.InstallReport\u xxxxxxxxx”“InstallReport”是我序列化的对象中的列表。在其他中。。。

我的数据库为空时没有创建映射。因此,当我尝试从一个从dbset序列化的文件中反序列化一个对象时,我得到一个错误,指出类中包含的一个类不可用。我猜这是因为映射/代理尚未创建,但我不知道如何在调用之前强制EF创建它。只要数据库/EF类中有数据,一切都正常。。但是当我没有记录时,我会收到一个错误,指出“反序列化需要System.Data.Entity.DynamicProxies.InstallReport\u xxxxxxxxx”“InstallReport”是我序列化的对象中的列表。在其他中。。。这是我的串行/反序列化代码

public void runDataBackup(string pathName)
    {
        IFormatter formatter = new BinaryFormatter();
        Stream stream = new FileStream(pathName + "Workorders.rbk", FileMode.Create, FileAccess.Write, FileShare.None);
        formatter.Serialize(stream, db.Workorders.ToList());
        stream.Close();

        stream = new FileStream(pathName + "RevenueForecasts.rbk", FileMode.Create, FileAccess.Write, FileShare.None);
        formatter.Serialize(stream, db.RevenueForecasts.ToList());
        stream.Close();

        stream = new FileStream(pathName + "ImportLogs.rbk", FileMode.Create, FileAccess.Write, FileShare.None);
        formatter.Serialize(stream, db.ImportLogs.ToList());
        stream.Close();
    }

    public void runDataRestore(string pathName)
    {
        IFormatter formatter = new BinaryFormatter();
        Stream stream = new FileStream(pathName + "Workorders.rbk", FileMode.Open, FileAccess.Read, FileShare.Read);
        List<Workorder> rbkWorkorders = (List<Workorder>)formatter.Deserialize(stream);
        stream.Close();

        stream = new FileStream(pathName + "RevenueForecasts.rbk", FileMode.Open, FileAccess.Read, FileShare.Read);
        List<RevenueForecast> rbkRevenueForecasts = (List<RevenueForecast>)formatter.Deserialize(stream);
        stream.Close();

        stream = new FileStream(pathName + "ImportLogs.rbk", FileMode.Open, FileAccess.Read, FileShare.Read);
        List<ImportLog> rbkImportLogs = (List<ImportLog>)formatter.Deserialize(stream);
        stream.Close();

        var w = db.Workorders.ToList();
        db.Database.ExecuteSqlCommand("delete from Workorders");
        w = rbkWorkorders;
        var r = db.RevenueForecasts.ToList();
        db.Database.ExecuteSqlCommand("delete from RevenueForecasts");
        r = rbkRevenueForecasts;
        var i = db.ImportLogs.ToList();
        db.Database.ExecuteSqlCommand("delete from ImportLogs");
        i = rbkImportLogs;
        commitChanges();
    }
public void runDataBackup(字符串路径名)
{
IFormatter formatter=新的BinaryFormatter();
Stream Stream=新文件流(路径名+“Workorders.rbk”,FileMode.Create,FileAccess.Write,FileShare.None);
序列化(stream,db.Workorders.ToList());
stream.Close();
stream=newfilestream(路径名+“RevenueForecasts.rbk”,FileMode.Create,FileAccess.Write,FileShare.None);
序列化(stream,db.RevenueForecasts.ToList());
stream.Close();
stream=newfilestream(路径名+“ImportLogs.rbk”,FileMode.Create,FileAccess.Write,FileShare.None);
序列化(stream,db.ImportLogs.ToList());
stream.Close();
}
public void runDataRestore(字符串路径名)
{
IFormatter formatter=新的BinaryFormatter();
Stream=新文件流(路径名+“Workorders.rbk”,FileMode.Open,FileAccess.Read,FileShare.Read);
List rbkWorkorders=(List)格式化程序。反序列化(流);
stream.Close();
stream=newfilestream(路径名+“RevenueForecasts.rbk”,FileMode.Open,FileAccess.Read,FileShare.Read);
List rbkrevenuefections=(List)格式化程序。反序列化(流);
stream.Close();
stream=新文件流(路径名+“ImportLogs.rbk”,FileMode.Open,FileAccess.Read,FileShare.Read);
List rbkImportLogs=(List)格式化程序。反序列化(流);
stream.Close();
var w=db.Workorders.ToList();
db.Database.ExecuteSqlCommand(“从工单中删除”);
w=rbkWorkorders;
var r=db.RevenueForecasts.ToList();
ExecuteSqlCommand(“从RevenueForecast中删除”);
r=RBKREVENUE预测;
var i=db.ImportLogs.ToList();
ExecuteSqlCommand(“从ImportLogs中删除”);
i=rbkImportLogs;
提交更改();
}
有人知道如何告诉EF生成代理吗

经过更多的阅读,我现在完全理解了这个问题。由于EF中使用了代理,因此该对象实际上是Workorders_uxxxxxx(AppDomain中生成的一些UUID)

然而,我仍然不明白为什么没有某种方法来创建对象


有人找到办法解决这个问题吗?还是让我做一个深度复制,以便我的对象是Workorder而不是Workorder\uxxxxxxx?

代码中的错误在哪里?在var w=db.Workorders.ToList()之后;?只要我尝试反序列化存储在以下位置的文件中的对象,我就会得到它:List rbkWorkorders=(List)formatter.deserialize(stream);