我如何分离这个实体框架模型来防止内存错误

本文关键字:模型 框架 错误 内存 实体 何分离 分离 | 更新日期: 2023-09-27 18:09:58

我正试图与一组数据从遗留的应用程序工作,并将其移动到MSSQL数据库。我用c#和EF创建了一个应用程序来管理数据。这个类的结构代表了旧的C风格数组,但是有一些类的顺序。

这是三个主要的类。其他属性涉及,但我只包括主要的形式和内存占用(AccountDetails)在这里。当这个结构被构建出来时,它有一个模拟-从50到100个帐户,然后每个帐户有1000个或更多的帐户详细对象。

如果我一次添加整个结构-并保存更改,我会得到内存错误。我如何添加我所有的AccountDetail对象,并保持它链接为一个对象结构?我可以单独添加它们(我有所有的ID和一个到许多的设置正确,虽然不是所有的细节都包括在这里)。

public class Simulation 
{
    public string Name { get; set; }
    public List<Account>     Accounts { get; set; }
}
public class Account
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Type { get; set; }
    public List<AccountDetail>     Details { get; set; }
}
// trouble in here....
public class AccountDetail
{
    public int Id { get; set; }
    public int Type { get; set; }
    public int Scenario { get; set; }
    public double M01 { get; set; }
     ..... class has 60 doubles for 5 years of payments ....
    public double M60 { get; set; }
} 

谢谢,

k .

我如何分离这个实体框架模型来防止内存错误

好吧,既然你有所有的id。

  1. 创建仿真对象并只填充非导航属性(如int, double等)保存更改

  2. 创建帐户列表并仅使用非导航属性填充它,但确保填写了SimulationID(或您用于将帐户链接到模拟的外键)。保存更改。

  3. 创建AccountDetails列表,仅用非导航属性填充它,但确保填写AccountID(或用于将帐户详细信息链接到帐户的外键)

在实体框架中,你不需要所有的对象都在内存中。重要的是外键。现在,如果您愿意,您可以通过一次只保存10个帐户来节省内存。但说实话,我还没有看到EF抱怨内存,所以这就提出了问题……你把一切都设置好了吗?