我正在使用带有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" />
我知道我可以覆盖数据上下文的构造函数....但我认为这应该是“自动映射”。有什么想法吗?
提前致谢!
答案 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实现。