2012-02-25 80 views
3

我使用EF 4.3與Ninject。我有一個簡單的DataContext,並且爲它創建了一個接口。這是一個簡單的接口:實體框架4.3 - 使用DataContext配置ConnectionString接口

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

    int SaveChanges(); 
} 

MyDataContext的執行情況:

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,它會生成另一個名爲完整程序集名稱的數據庫。只有一個表/類被映射。不知道這與它有什麼關係。

<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 2012-02-25 23:27:40