VS提供了很多便捷的工具,Sql Server对象管理器可以直接在VS里面访问数据库,不用再打开一个Management Studio。这里记录下Sql Server对象管理器的使用。
1.先在视图里面找到SqlServer对象管理器
2.在vs的右侧边栏就会出现。
我们先链接一个localdb,在Sql Server上右键 选择添加Sql Server
会出现下面的对话框,这里填写(LocalDb)v11.0,选用windows验证。这样就出现本机下面的所有localdb了。
这个是来自MVC webconfig的链接字符串 connectionString="Data Source=(LocalDb)v11.0;Initial Catalog=aspnet-EF-20150303094817;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnet-EF-20150303094817.mdf"。
让人奇怪的是,AttachDbFilename是aspnet-EF-20150303094817.mdf,在MVC4的工程App_Data文件中是数据库名称是EF.Models.VetContext.mdf. 在c盘和工程里面没有找到aspnet-EF-20150303094817.mdf,但实际操作是EF.Models.VetContext.mdf.他们应该存在某种映射。
<add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)v11.0;Initial Catalog=aspnet-EF-20150303094817;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnet-E F-20150303094817.mdf" /> <add name="CEEntities" connectionString="Data Source=|DataDirectory|Db.sdf" providerName="System.Data.SqlServerCe.4.0" />
<add name="SqlConnection" connectionString="Data Source=RJ-STONE-PC;Initial Catalog=Support;Integrated Security=False;Persist Security Info=False;User ID=sa;Password=sa" providerName="System.Data.SqlClient" /> </connectionStrings>
sqlserver和ce的链接字符串都不用说了。 Initial Catalog表示数据库名称。Security Info表示登陆方式,false表示需要sa登陆。为true或者SSPI都是无需验证的windows登陆。
奇葩的是我修改了attachDBfilename的名称为AttachDBFilename=|DataDirectory|EF.mdf,App_data中并没有创建新的ef.mdf,将Initial Catalog后面也改成了EF 运行程序之后,数据还是更新在了EF.Models.VetContext.mdf中。
<add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)v11.0;Initial Catalog=EF;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|EF.mdf" />
这个现象让我有点寝食难安。现在发现,原来是开始创建VetContext.cs的时候,那个DefaultConnection根本没有使用。Dbcontext会自动的创建一个连接,EF.Models.VetContext.mdf才是这个默认链接的名称。所以修改webconfig那个链接或者删除那个连接字符串都是没有影响的。
public class VetContext:DbContext { public DbSet<Patient> Patients { get; set; } public DbSet<Visit> Visits { get; set; } }
正确的做法是加上一个构造函数:
public class VetContext:DbContext { public DbSet<Patient> Patients { get; set; } public DbSet<Visit> Visits { get; set; } public VetContext() : base("DefaultConnection") { } }
这个时候就会创建新的数据库了。
同样可以用来加载本地Sql Sever 数据库。
另外,vs还有自带的服务器资源管理器里面也可以打开数据库。但没有上面的好用。当数据库开始处于链接状态,他不能成功链接到数据库,需要待其他使用链接关闭之后才可以。对于数据库的访问功能,两者没有什么区别。