私は最近、Entity Framework4.3とDependancyInjectionを使用してMVC3を学習しているので、後日単体テストを実装できます。現在、さまざまな例で見たいくつかの関数を実装しようとしていますが、依存関係インジェクションの使用に起因すると思われるいくつかの問題が発生したため、どこが間違っているのかを誰かに指摘してもらいたいと思います。
私の最初の質問は非常に単純です。私が見たほとんどのMVC3の例では、データベースへのアクセスはコントローラーで行われますが、依存関係の注入を使用する場合は、このコードを実装されたリポジトリにリファクタリングする必要があるようです。これは正常で正しいですか?
私の2番目のより詳細な問題は、この単純な例を扱うことです。
このメソッドは、オンラインの例(ここ)からほとんどコピーされたリポジトリクラスにあります。ただし、パーツに関してエラーが発生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
});
}
}
これは、依存関係の注入を使用したことによる問題ですか、それとも私が誤解している何か他のことが起こっていますか?
さらに詳しい情報が必要な場合は、お問い合わせください。提供させていただきます。
どうもありがとう。