2012-02-25 78 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