实体框架4.3 - 使用DataContext接口配置ConnectionString

时间:2012-02-25 16:39:55

标签: entity-framework connection-string

我正在使用带有Ninject的EF 4.3。我有一个简单的DataContext,我已经为它创建了一个接口。这是一个简单的界面:

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" />

我知道我可以覆盖数据上下文的构造函数....但我认为这应该是“自动映射”。有什么想法吗?

提前致谢!

1 个答案:

答案 0 :(得分:3)

做一个

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

与此同时:

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

避免任何问题。

映射的内容还取决于你的DbSet&lt;&gt;在你的DbContext上声明,你也应该发布MyDataContext实现。