2011-11-10 55 views
0

後成爲空我有我的ASP.Net項目導航屬性使用條款

Model.edmx construct

有兩種foreignkeyconstructs內的數據庫實體模型,無論是ID在所示關係之間的結構。

現在我想用下面的方法

  IntraNetEntities entities = new IntraNetEntities(); 

     if (entities.EmployeeList.Count() == 0) 
     { 
      using (entities) 
      { 
       for (int i = 0; i < 100; i++) 
       {  

        EmployeeList newEmployeeList = new EmployeeList() 
        { 
         department = "Standardabteilung", 
         mobile = i, 
         landline = 1 + i, 
         mail = "Standardemail", 
         position = "Standardfunktion", 
         shortcode = "abc", 
         lastname = "StandardNachname", 
         roomnumber = Convert.ToDouble(i), 
         firstname = "Standardvorname" 
        }; 

        PrivateContact newPrivateContact = new PrivateContact() 
        { 
          city = "Standardstadt", 
          country = "deutscheland", 
          landline = i, 
          mail = "standardemail", 
          mobile = i * 2, 
          street = "standardstreet", 
          zip = i * 10, 
          EmployeeList = newEmployeeList 
        }; 

        WorkContact newWorkContact = new WorkContact() 
        { 
         city = "Standardstadt", 
         country = "deutscheland", 
         landline = i * 9, 
         mobile = i * 12/8, 
         mail = "standardmail", 
         street = "standardstraße", 
         zip = i * 9, 
         EmployeeList = newEmployeeList 
        }; 

        newEmployeeList.PrivateContact = newPrivateContact; 
        newEmployeeList.WorkContact = newWorkContact; 

        entities.AddToEmployeeList(newEmployeeList); 
        entities.AddToPrivateContact(newPrivateContact); 
        entities.AddToWorkContact(newWorkContact); 

       } 

       entities.saveChanges(); 

       return true; 
      } 
     } 
     else 
     { 
      return false; 
     } 

我的問題是增加100個樣本項目,我的導航屬性時,這個方法結束消失! 它們在調試時看起來都很好,但仍然處於使用案例中,但之後它們都是空的,沒有對這些值做任何更改。

如何保持導航值?

謝謝

+0

只是讓我明白 - 你的意思是,新的聯繫人和僱員的名單AREN」 t被持久化到數據庫?或者,newPrivateContact.EmployeeList正在失去它的價值併成爲空(如果這就是你的意思,你如何在使用之外訪問newPrivateContact,因爲它的範圍在使用範圍內)?或者是其他東西? – mjwills

+0

我只想保留導航屬性。我的意思是newPrivateContact.EmployeeList和/或newEmployeeList.PrivateContact正在失去它們的價值!鑑於newEmployeeList和newPrivateContact都是在使用子句 – Evils

回答

1

在結尾處使用調用「Dispose」。這就是爲什麼你的導航屬性下降。從MSDN網站:

using語句以正確的方式調用對象上的Dispose方法,並且(如前所示使用它時)也會導致對象本身儘快超出範圍處置被稱爲。

http://msdn.microsoft.com/en-us/library/yh598w02.aspx

using語句允許程序員來指定使用資源的對象應該釋放他們。

http://msdn.microsoft.com/en-us/library/yh598w02%28v=vs.80%29.aspx

+0

之後在新的using子句中調用和選擇的元素,那麼是否有任何方法可以保存上下文,那些導航屬性? – Evils

+0

好吧,如果您選擇將它放入Using語句中,那麼您明確告訴程序在完成使用範圍後不要保存該上下文。從技術上講,你並不總是需要使用語句,所以你可以嘗試完全移除。我已經將一個Context obj作爲ref參數傳遞給各種庫函數,並且這很好地工作(儘管它可能無法很好地擴展)。 – Graham

0

在退出using塊,你的背景下將得到安置。 導航屬性需要一個存在的上下文。所以你必須確保你的上下文對象足夠長。

你可能會考慮使用Autofac或其他支持asp.net的di框架。

使用您的上下文將獲得建造的HttpRequestScoped()擴展方法和佈置根據Web請求的LiveCycle:

builder.RegisterType<IntraNetEntities>().As<IntraNetEntities>().HttpRequestScoped();