这可能是一个有一百万个答案的问题,但这让我很烦恼。
我有一个使用EF的mvc应用程序。现在我将DbContext注入我的业务对象还是以其他方式执行?
我显然可以注入它但是这样我最终在我的类中使用DbContext而不是Typed Context。这意味着我没有intellisense,代码看起来不那么优雅
例如
var test=(from d in context.Set<User>() where d.Username=="testname" select d).FirstOrDefault();
与打字的可爱性相比
var test=(from d in context.Users where d.Username=="testname" select d).FirstOrDefault();
现在我知道这不是一个大问题,但是当编写成千上万行时,最好有智能感知,特别是如果不熟悉代码的其他编码人员正在帮忙。
我知道有工作单元模式,但在我看来,当涉及到EF时,魔鬼自己的工作就在其中,因为它有效地将存储库模式包装在存储库模式中,这是荒谬的。所以这对我来说不是一个选择。
那么我们注入了吗?如果是这样我们可以以某种方式最终得到一个打字的上下文?
或者我们不注射?
答案 0 :(得分:0)
首先,我认为“注入”一词可能存在一些误解。
注入意味着:
public class UserService
{
MyContext _db;
public UserService(MyContext db)
{
_db = db;
}
public void GetUserById(string id)
{
_db.Users.First(x => x.Id = id);
}
}
而不是:
public class UserService
{
MyContext _db = new MyContext();
public UserService()
{
}
public void GetUserById(string id)
{
_db.Users.First(x => x.Id = id);
}
}
注意第一个例子MyContext
是如何“注入”构造函数的。在第二个示例中,UserService
本身会创建MyContext
的新实例。
现在,你呢?我相信你应该,事实上,这是一个公认的良好做法。在此之前,请务必阅读并尝试几个示例项目,以了解它带给您的好处。 Wikipidia: Dependency Injection Advantages