我正在使用Entity Framework 6.0,SQL Server 2012和ASP.NET 4.5处理Repository和工作单元设计模式 在这方面,我面临着一个奇怪的问题。
在编写DB Context类的代码时,我们传递Connectionstring或连接字符串名称,我得到了以下问题
internal class MyEntities : DbContext, IUnitOfWork, IDisposable
{
public MyEntities()
: base("Data Source=.;Initial Catalog=School;User ID=sa;Password=xxxxxx;")
{
Database.SetInitializer<MyEntities>(new MyDatabaseInitializer<MyEntities>());
}
...
DbSet properties
...
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
//
}
.
.
.
}
当我将完整的Connectionstring传递给基础构造函数时,如上所示,所有选择,插入,更新,删除操作工作文件
但是,当我使用Connectionstring Name作为基础构造函数时,如下所示,它给了我各种错误。
public MyEntities()
: base("Name=MyEntities")
{
Database.SetInitializer<MyEntities>(new MyDatabaseInitializer<MyEntities>());
}
使用SaveChanges()
方法和DbSet<TEntity> dbSet = this.GetQuery() as DbSet<TEntity>;
它给了我
System.Data.SqlClient.SqlException:用户'xxxx \ xxxx'登录失败。
当从以下方法调用MyEntities的对象时,我得到
无效的操作;连接已关闭
public IUnitOfWork Create()
{
DbContext context;
lock (EFUnitOfWorkFactory.LockObject)
{
context = new MyEntities();
//if (context.Database.Connection.State == ConnectionState.Closed)
// context.Database.Connection.Open();
}
return new EFUnitOfWork(context);
}
web.config中的My Connectionstring如下
<connectionStrings>
<add name="MyEntities" connectionString="Data Source=.;Initial Catalog=School;Integrated Security=true;User ID=sa;Password=xxxxxx;" providerName="System.Data.SqlClient" />
</connectionStrings>
即使我更改了数据源值。到服务器的Servername或IPAddress不起作用