2012-02-25 11 views
3

NinjectでEF 4.3を使用しています。私は単純なDataContextを持っており、そのためのインタフェースを作成しました。 MyDataContextのEntity Framework 4.3 - DataContextインターフェイスでConnectionStringを設定する

public interface IMyDataContext 
{ 
    DbSet<ComplexType> ComplexTypes { get; set; } 

    int SaveChanges(); 
} 

実装:

public class MyDataContext : DbContext, IMyDataContext 
{ 
    public DbSet<ComplexType> ComplexTypes { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); //Not sure if this is necessary.. 

     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
    } 
} 

そして、私はNInjectにそれを追加している:それはシンプルなインターフェースです

Kernel.Bind<IMyDataContext>().To<MyDataContext>(); 

動作しない接続文字列名のMyDataContextを使用し、 IMyDataContextを使用すると、完全なアセンブリ名という別のデータベースが生成されます。 1つのテーブル/クラスのみがマップされています。

<connectionStrings> 
    <add name="MyDataContext" 
    connectionString="Server=MyPc\SQLEXPRESS;Database=MyDataContext;Persist Security Info=True;Integrated Security=true;MultipleActiveResultSets=True" 
    providerName="System.Data.SqlClient" /> 

私はデータコンテキストにコンストラクタをオーバーライドすることができます知っている....が、私は、これは「自動マップ」になっていたと思いました。何かご意見は?

ありがとうございます!

答えて

3

ちょうどこれに伴い

Kernel.Bind<IMyDataContext() 
    .To<MyDataContext() 
    .WithConstructorArgument("nameOrConnectionString", "MyDataContext"); 

の操作を行います。

public class MyDataContext : IMyDbContext, DbContext 
{ 
    public MyDataContext (string nameOrConnectionString) 
     : base(nameOrConnectionString) { } 
} 

任意の問題を回避するには。

マップされる内容は、DbContextのDbSet <>宣言によって異なりますが、MyDataContext実装も投稿する必要があります。

+0

ありがとうございました - 上記の実装を追加しました。私はdatacontextの名前を使う方法を望んでいましたが、これは簡単だと思います。感謝します。 – Shibbz

関連する問題