我遇到一个问题,即当我的数据库为空时,不会创建映射。因此,当我尝试从一个从dbset序列化的文件中反序列化一个对象时,我得到一个错误,指出该类中包含的一个类是不可用的。我猜测这是因为没有创建映射/代理,但我不知道在打电话之前如何强制EF创建它。只要我在数据库/ EF类中有数据,一切正常。但是当我没有记录时,我得到一个错误,说明反序列化需要" System.Data.Entity.DynamicProxies.InstallReport_XXXXXXXXXX" " InstallReport"是我序列化的对象中的List。其中......这是我的序列号/反序列号码
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();
}
任何人都知道如何告诉EF生成代理?
经过一番阅读后,我现在完全理解了这个问题。由于EF中使用了proxie,对象实际上是Workorders_XXXXXX(AppDomain中生成的一些UUID)......
然而,我仍然不明白为什么没有某种方法会导致创建对象。有没有人找到解决这个问题的方法?还是我离开时做了一个深层复制,以便我的对象是Workorder而不是Workorder_XXXXXXX?