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