2013-04-18 67 views
1

我正在嘗試使用來自舊版應用程序的一組數據並將其移入MSSQL數據庫。我使用EF在C#中創建了一個應用程序來管理數據。它的類結構代表了傳統應用程序中的舊C風格數組,但具有一些類的順序。我如何區分這個實體框架模型以防止內存錯誤?

這三個主要類別。其他屬性也涉及到,但我只在這裏包含了主窗體和內存管理器(AccountDetails)。當這個結構構建出來時,它具有一個模擬 - 從50到100個賬戶,然後每個賬戶擁有1000或更多賬戶明細對象。

如果我一次添加整個結構 - 並保存更改,則會出現內存錯誤。我如何添加所有的AccountDetail對象並保持鏈接爲一個對象結構?我可以分別添加它們嗎(我有所有的ID和一個Many的安裝程序,雖然並不是所有的細節都包含在這裏)。

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.

+0

M01-M60有一天會咬你或你的同事。 – CodeCaster

+0

這個項目是一個經驗,而不是未來使用的生產代碼。 M01-M60的要點是獲得一個代表5年的結構,我們可以將其存儲爲一張表格記錄。 它使用像這樣的索引: RateEnvirSize = D_COS * D_BYTES * LINESIZE; 你會推薦一種不同的方式嗎? – csystems

+1

這個項目是一個經驗,而不是未來使用的生產代碼。我理解它的確不是我們想如何在內存中編程,在這種情況下,我會使用List或類似類型的容器。對不起,有兩條評論,編輯花了我5分鐘,因爲我意外地進入了它,並且發佈了。 – csystems

回答

3

好吧,既然你把所有的IDS。只需執行以下操作。

  1. 創建模擬對象並僅使用非導航屬性填充它(所以整數,雙精度等)保存更改。

  2. 創建一個帳戶列表並僅使用非導航屬性填充它,但要確保模擬ID(或用於將帳戶鏈接到模擬的外鍵填入)。保存更改。

  3. 創建AccountDetails的列表,只填充非導航屬性,但確保AccountID(或用於鏈接帳戶詳細信息到Account的外鍵已填充)。

在實體框架中,您不需要將所有對象都放在內存中。這是重要的外鍵。現在,如果您願意,您可以一次只保存10個帳戶來保存內存。但說實話,我還沒有看到英孚抱怨記憶,所以這引起了問題......你把所有的東西都設置正確了嗎?

+0

首先,謝謝你的回答。我認爲這可能是這樣的,但對EF仍然是新的。我相信我已經正確地設置了一切,因爲如果我使用更少的帳戶(但完整結構)進行測試集,它就可以工作。然而,傳統應用中的典型數據集是150個帳戶,每個帳戶有1290個詳細信息行,每個詳細信息行有60個雙重信息行。如果我的數學結果是正確的,那麼每個模擬結果超過11,610,000個雙精度值。 – csystems