代码改变世界

Sql Server对象管理器的使用

2015-03-03 11:55  stoneniqiu  阅读(1026)  评论(0编辑  收藏  举报

    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还有自带的服务器资源管理器里面也可以打开数据库。但没有上面的好用。当数据库开始处于链接状态,他不能成功链接到数据库,需要待其他使用链接关闭之后才可以。对于数据库的访问功能,两者没有什么区别。