2014-10-12 89 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') 
}