实体框架&序列化

时间:2014-08-01 17:19:49

标签: c# entity-framework serialization

我遇到一个问题,即当我的数据库为空时,不会创建映射。因此,当我尝试从一个从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?

0 个答案:

没有答案