2014-10-12 34 views
0

我有一個MVC 5 Web應用程序,它談論我的類庫的數據庫需求和類庫使用實體框架6。
下面是來自類庫的2種方法。
他們都在發起一個新的上下文。我如何讓他們只使用一個上下文,而不使用類級變量?
此外,如果這兩種方法是保存東西,我怎麼能把它們都包裝到一個事務中,即使這些保存發生在不同的類中?實體框架:Db上下文範圍和事務

public int FindUnknownByName(string name, string language) 
{ 
    using (var context = new ScriptEntities()) 
    { 
     int languageId = this.FindLanguage(language); 
     var script = context.scripts.Where(l => l.Name == name && l.Unknown == true && l.LanguageId == languageId).FirstOrDefault(); 
     if (script != null) 
     { 
      return script.Id; 
     } 
     return 0; 
    } 
} 

public int FindLanguage(string language) 
{ 
    using (var context = new ScriptEntities()) 
    { 
     var lang = context.languages.Where(l => l.Name == language).FirstOrDefault(); 
     if (lang != null) 
     { 
      return lang.Id; 
     } 
     return 0; 
    } 
} 
+0

使上下文的私有類領域。 – 2014-10-12 05:55:37

+0

**不使用班級變量** – 2014-10-12 07:24:49

+0

你想達到什麼目的?爲什麼? – user3411327 2014-10-12 08:18:19

回答

0

使上下文成爲私有類變量。

private ScriptEntities context = new ScriptEntities() 
public int FindUnknownByName(string name, string language) 
{ 
     int languageId = this.FindLanguage(language); 
     var script = context.scripts.Where(l => l.Name == name && l.Unknown == true && l.LanguageId == languageId).FirstOrDefault(); 
     if (script != null) 
     { 
      return script.Id; 
     } 
     return 0; 
} 

public int FindLanguage(string language) 
{ 
     var lang = context.languages.Where(l => l.Name == language).FirstOrDefault(); 
     if (lang != null) 
     { 
      return lang.Id; 
     } 
     return 0; 

} 

還實現IDisposable和配置上下文。

0

您可以使用擴展方法:

public int FindUnknownByName(this ScriptEntities context, string name, string language) 
{ 
     int languageId = context.FindLanguage(language); 
     var script = context.scripts.Where(l => l.Name == name && l.Unknown == true && l.LanguageId == languageId).FirstOrDefault(); 
     if (script != null) 
     { 
      return script.Id; 
     } 
     return 0;. 
} 

public int FindLanguage(this ScriptEntities context, string language) 
{ 
    var lang = context.languages.Where(l => l.Name == language).FirstOrDefault(); 
    if (lang != null) 
    { 
     return lang.Id; 
    } 
    return 0;  
} 

則:

using (var context = new ScriptEntities()) 
{ 
    var language = context.FindUnknownByName('name', 'language') 
}