我最近一直在使用 Entity Framework 4.3 和依赖注入来学习 MVC3,因此我可以在以后实现单元测试。我现在正在尝试实现一些我在各种示例中看到的功能,但是我遇到了一些似乎源于我使用依赖注入的问题,因此我希望有人指出我哪里出错了。
我的第一个问题很简单;在我见过的大多数 MVC3 示例中,对数据库的访问是在控制器中完成的,但是当使用依赖注入时,我似乎需要将此代码重构到已实现的存储库中。这是正常和正确的吗?
我的第二个更深入的问题是处理这个简单的例子:
我的存储库类中有这个方法,它几乎是从在线示例(此处)复制而来的。但是我收到关于该部分的错误Include
,并且智能感知确实说该变量需要是一个字符串。我已经尝试了前面提到的链接中的原始代码,并且效果很好,该项目之间的唯一主要区别是我使用的是依赖注入。
public ExampleUser GetStruContractUser(int id)
{
ExampleUser user = context.ExampleUsers
.Include(i => i.ExampleRoles)
.Where(i => i.UserID == id)
.Single();
return user;
}
将参数更改Include
为以下工作正常。
public ExampleUser GetStruContractUser(int id)
{
ExampleUser user = context.ExampleUsers
.Include("ExampleRoles")
.Where(i => i.UserID == id)
.Single();
return user;
}
作为参考,这是我正在使用的 DbContext 类:
public class EFDbContext : DbContext
{
public DbSet<ExampleUser> ExampleUsers { get; set; }
public DbSet<ExampleRole> ExampleRoles { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Entity<ExampleUser>().ToTable("User", "MySchema");
modelBuilder.Entity<ExampleRole>().ToTable("Role", "MySchema");
modelBuilder.Entity<ExampleUser>()
.HasMany(m => m.ExampleRoles)
.WithMany(t => t.ExampleUsers)
.Map(a =>
{
a.MapLeftKey("UserID"); // your PK column name in user table
a.MapRightKey("RoleID"); // your PK column name in role table
a.ToTable("UserRole", "MySchema"); // your join table name
});
}
}
这是由于我使用依赖注入导致的问题,还是我误解了其他事情?
如果您需要更多信息,请询问,我会尽力提供。
非常感谢。