2012-12-04 122 views
0

我是新来的MVC概念和分离控制器逻辑的数据。我正在使用Linq to Sql - 现在我创建了一个新的DbContext实例,然后使用它从控制器查询数据库。我必须在代码中的不同位置做很多相同的查询 - 所以我的问题是 - 我能否在我的Model文件夹中创建一个独立的类,在那里创建一个新的dbcontext实例,并创建查询的函数db在类中,使这些函数公开,然后从我想要的任何控制器调用它们?我想它是一个2部分的问题,我能做到这一点,这是连接到数据库的首选方式,或者我只是写在不同的控制器的所有单独的代码?从单独的类查询数据库asp.net MVC

回答

1

如果您必须多次执行相似/相同的查询,我建议您compile your LINQ queries(该链接适用于LINQ to Entities,但对于LINQ to SQL基本上是一样的)。它反复调用查询有更好的性能。你可以做类似下面的代码片段的东西:

static readonly Func<DbContext, IQueryable<T>> compiledQuery = CompiledQuery.Compile<DbContext, IQueryable<T>>(/*your query goes here*/); 
using (DbContext context = new DbContext()) 
{ 
    IQueryable<T> results = compiledQuery.Invoke(context); 
} 

基本上你可以把这些编译查询您的DbContext类,然后使用using语句调用它。

+0

这会去哪里?在模型文件夹中的单独类中? –

+0

@ScottSelby你可以把它放到你的DbContext类中,删除'using'语句并用'this'关键字替换'context'' – rexcfnghk

+0

真的吗?我喜欢使用,因为它强制处理连接 –

0

这正是你想要做的......你想创建一个仓库(也许在一个单独的项目中),这样分离和重用所有控制器中的所有数据访问代码......搜索“仓库模式“...