2012-09-11 27 views
0

這個問題是像我previous one here!ASP.NET C#實體框架 - 如何正確更新外鍵? - 第2部分

這裏有東西2部分我學會了,希望是真的:

  1. 不要使用數據實體上下文爲靜態
  2. 處置數據上下文之後 - 通常使用後一個時間
  3. 參數傳遞到UPDATING實體法,而不是實體 (我會解釋,並在這裏我十字路口謊言)

這是我修改後的代碼:

public class ManagerBase 
    { 
     private NoxonEntities _entities = null; 

     public NoxonEntities Entities 
     { 
      get 
      { 
       if (_entities == null) 
        _entities = new NoxonEntities(); 

       return _entities; 
      } 
     } 
    } 

//Managers uses ManagerBase class as a Base class 
MemberManager currentMemberManager = new MemberManager(); 
currentMemberManager.Save(memberId, username, password, languageId); 


//MemberManager class 
public Member Save(long memId, string username, string password, int langId) 
     { 
      using (var Context = base.Entities) 
      { 
       var Data = Context.Member.First(c => c.Id == memId); 

       Data.Username = username; 
       Data.Password = password; 
       Data.Language = Context.Language.First(c => c.Id == langId); //Gets the foreign entity 

       Context.SaveChanges(); 

       return Data; 
      } 
     } 

這工作也不例外。但通常這個SAVE方法是由接口實現的方法。所以,我寧願通過一個對象值SAVE方法比通過所有字段像上面一樣。 比如我想使用這樣的:

//Member is an EntityFramework Object which was created during EF Model when I added by visual studio 
//Filter is the method that returns an EntityFramework Object from EF (and eventually database) with given some arguments 
//SomeArguments could be MemberId = 2 
Member modifiedMember = currentMemberManager.Filter(someArguments); 
modifiedMember.UserName = "newvalue"; 
currentMemberManager.Save(modifiedMember); 

在保存方法也許我可以用這樣的:

public Member Save(Member modifiedMember) 
      { 
       using (var Context = base.Entities) 
       { 
        var Data = Context.Member.First(c => c.Id == modifiedMember.Id); 

        Data.Username = modifiedMember.Username; 
        Data.Password = modifiedMember.Password; 
        Data.Language = Context.Language.First(c => c.Id == modifiedMember.LanguageId); //Gets the foreign entity 

        Context.SaveChanges(); 

        return Data; 
       } 
      } 

如果我要利用這個就像一個正上方,我我認爲我不應該使用傳遞對象EF Object,相反,也許我應該使用其他一些我將寫入的類來將參數映射到EF成員實體。

第一個問題:這是一個好方法嗎?

public class MyMember 
{ 
    public long Id { set; get; } 
    public string Username { set; get; } 
    public string Password { set; get; } 
    public int LanguageId { set; get; } 
} 

MyMember.Username = "NewValue"; 
MyMember.LanguageId = 4; //4 as in new value 
currentMemberManager.Save(MyMember); //As you can see MyMember is not an EF Entity in here 

但是由於已經有一些書寫的代碼,這會花費很長時間。

第二個問題:我不能使用EF實體對象OUTSIDE並修改它那裏保存INMemberManager類?

再次,非常感謝您的幫助提前。

+0

請,任何人.. –

+0

我有這個鏈接的答案。 [http://stackoverflow.com/questions/12389704/how-to-update-entity][1] [1]:http://stackoverflow.com/questions/12389704/如何對更新實體 –

回答