2011-09-12 121 views
1

我是EF 4.1的新手,嘗試將一些代碼從EF 4.1(代碼優先)中移出。這是一些背景。我正在管理幾家公司的產品,所以我有一個名爲「公司」的欄目「產品」表。我需要從包含給定公司產品的Excel文件更新(如果不存在,則更新)(如C1)。下面是我在做什麼(使用專有的數據庫訪問代碼和LINQ):使用實體框架從Excel更新數據庫4.1

  • 檢索所有產品,爲公司的C1的產品列表
  • 對於每個產品出現在Excel:
    • 搜索
    • 創造新的產品實例
    • 增加產品數據庫
    • 012:如果從Excel的產品。如果產品不存在,那麼已經
    • 存在加載的產品列表
    • 增加產品所裝載的產品 否則列表

這很簡單,但將其轉換爲EF 4.1似乎在數據庫

  • 更新產品不那麼容易:

    我可以很容易從上下文中檢索和過濾所有產品。我也可以輕鬆搜索加載列表中的Excel產品。如果不存在,我可以創建該產品並將其添加到上下文中。但是,如何模仿我的「緩存」系統,將新添加的產品添加到內存中加載的產品列表中(Excel文件可以包含多次相同的產品)?另外當更改實體狀態以及何時執行savechanges?

    基督教

  • 回答

    0

    下面是如何做到這一點的大致輪廓。

    EF緩存加載的實體。您可以使用Local屬性來訪問它。當您添加新實體時,此集合將由EF進行修改。

    context.Products.Where(p => p.Company == "C1").ToList();//force EF to load products 
    
    while(/*loop through excel file) 
    { 
        var product = context.Products.Local.Where(p=> p.Id == excelProductId); 
        if (product == null) 
        { 
        //insert 
        } 
        else 
        { 
        /update 
        } 
    } 
    
    context.SaveChanges(); 
    
    +0

    這個「本地」屬性正是我一直在尋找的。完美! – Christian

    相關問題